SlideShare a Scribd company logo
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by
Apache GEODE Meetup Tokyo #2
インメモリーで超高速処理を実現する場合のカギ
2016/10/11
ウルシステムズ株式会社
http://www.ulsystems.co.jp
mailto:info@ulsystems.co.jp
Tel: 03-6220-1420 Fax: 03-6220-1402
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 1
About Me
山河 征紀
Business
Private
• GEODE歴:9年(Since 2008)
• GEODEバグ報告数:nnn 件
• マラソン
• 横浜マラソン2016:4h17m
• 目標は今年度中のサブ4
• 登山
• 目標はココ
ULS 2
Copyright © 2011-2013 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by
インメモリーで
超高速処理を実現する場合のカギ
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 3
処理に応じてデータの分散を繰り返す
Apache Geodeでの大量データ処理
処理A 処理B 処理C
処理A 処理B 処理C
処理A 処理B 処理C
パーティション
リージョン
パーティション
リージョン
パーティション
リージョン
パーティション
リージョン
どうしてもメモリーにのらないデータはDiskやRDBへ保持
高速に処理を行うためには、
たくさんのオブジェクトをメモリーへのせることが重要!
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 4
リージョンのおさらい
リージョンとは分散するデータを保持する入れ物のこと
データの特性によってレプリケーションとパーティションを
使い分ける
パーティションレプリケーション
すべてのマシンで同一のデータ
を保持する
何れかのマシンにデータが存在
する
今回の例で言うと
処理への入出力データは「パーティションリージョン」
マスターデータは「レプリケーションリージョン」
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 5
データは、Javaのヒープメモリ上にJavaのオブジェクトと
して管理される
Geodeにおけるデータ管理
JVM
Cache
Region
Key Value
ABC
GGG
XYG
Region
…
Region
…
• インメモリデータへのエントリポイント
• アプリケーションはキャッシュを介して、データへの一連の操作を行う
• 任意のリージョンにより構成
• 論理的なデータのグループ(RDBにおけるテーブルのイメージ)
• Key-Value形式でのデータ管理
• 任意のオブジェクトに対して、一意のKeyを指定
• スキーマの概念はなく、任意のオブジェクトを格納
Cache
Region
public class Employee {
private int employeeNo;
private String firstName;
private String lastName;
private String deptCode;
・・・
・・・
}
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 6
1. Javaオブジェクトのメモリー使用量
2. 通信レイテンシー
今日、お話したいこと
処理A 処理B 処理C
処理A 処理B 処理C
処理A 処理B 処理C
パーティション
リージョン
パーティション
リージョン
パーティション
リージョン
パーティション
リージョン
ULS 7
Copyright © 2011-2013 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by
Javaオブジェクトのメモリー使用量
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 8
Apache Geodeのメモリー使用量
1億件のオブジェクトをデータ分散してみると…
public class ObjectPerson implements Serializable {
private Integer id;
private String firstName;
private String lastName;
private Integer age;
private Address address;
private List<String[]> phoneNumbers;
private List<String> emails;
private Date createdAt;
private Date updatedAt;
…(setter/getter略)…
JVM
サーバ
JVM
サーバ
JVM
サーバ
JVM
サーバ
1億件
データ分散
(パーティション)
1オブジェクト
のサイズ
200byte
(感覚値)
全体サイズ
20GB
(200byte×1億件)
1Nodeあたり
メモリ使用量
5GB
(20GB÷4Node)
見積値
(感覚)
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 9
Apache Geodeのメモリー使用量
予想を大幅に超えるメモリー使用量!
0.0 GB
20.0 GB
40.0 GB
60.0 GB
80.0 GB
100.0 GB
120.0 GB
140.0 GB
160.0 GB
180.0 GB
見積値 実測値
Server1 Server2 Server3 Server4
見積値の
約9倍!
44.2 GB
45.7 GB
44.5 GB
45.5 GB
179.9 GB
20.0 GB
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 10
なぜJavaオブジェクトが肥大化するのか
Javaでは、フィールドが何もないオブジェクトを生成するだ
けでも、メモリーを消費してしまう
public class EmptyObject {
}
public class NullSetObject {
private String str01 = null;
(略)
private String str50 = null;
private Integer int01 = null;
(略)
private Integer int50 = null;
}
String, Integerそれぞれ50個あり、
すべてnullを設定したオブジェクト
フィールドがひとつもない
オブジェクト
それぞれ100万オブジェクト生成し、生成にかかった時間とメモリー使用
量を測定した結果は…
EmptyObject NullSetObject
生成時間 17 ms 382 ms
メモリー使用量 33.5 MB 430.2 MB
22倍も遅い
13倍も多い
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 11
Stringのために88Byte必要
int配列4Byteのために32Byte必要
なぜJavaオブジェクトが肥大化するのか
オブジェクトを1つ生成する毎に、標準のメタデータが必要!
メタデータ:クラスポインター、状態フラグ、同期情報フラグなど
標準のメタデータ int
0 24 28 [Byte]
標準のメタデータ サイズ int
0 24 32 [Byte]36
標準のメタデータ Obj固有のメタデータ ポインタ char char標準のメタデータ サイズ char ・・・
0 5624 48 0 3824 32
int用の4Byteのために24Byte必要
数値をIntegerで保持する場合
数値配列をInteger配列で保持する場合
Stringの場合
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 12
jmapによりオブジェクト数を確認してみると…
num #instances #bytes class name
----------------------------------------------
1: 28000397 896018224 [Ljava.lang.String;
2: 14000714 812049584 [Ljava.lang.Object;
3: 28000000 672000000 java.util.Date
4: 14000012 336000288 java.util.ArrayList
5: 7000000 336000000 geodemeetup2.object.optimize.person.ObjectPerson
6: 14000128 224002048 java.lang.Integer
7: 7000000 224000000 geodemeetup2.object.optimize.person.ObjectAddress
8: 7000001 168001040 [Ljava.lang.Integer;
9: 5254 616936 [C
10: 575 126992 [B
11: 5171 124104 java.lang.String
12: 614 69544 java.lang.Class
13: 879 35160 java.util.LinkedHashMap$Entry
14: 785 31400 java.util.TreeMap$Entry
15: 305 19520 java.net.URL
16: 529 16928 java.util.HashMap$Node
17: 130 12480 java.util.jar.JarFile$JarFileEntry
18: 24 11584 [Ljava.util.HashMap$Node;
19: 138 11040 [Ljava.util.WeakHashMap$Entry;
20: 271 10840 java.lang.ref.Finalizer
21: 135 8640 java.util.jar.JarFile
…
Total 119019230 3669289272
Dateだけで
670MB!
Integerと配列
を合わせて
390MB!
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 13
オブジェクトではなくプリミティブ型を使用
プリミティブ型を使用すれば、このオーバーヘッドは削減で
きる
public class ObjectPerson implements Serializable {
private Integer id;
private String firstName;
private String lastName;
private Integer age;
private Address address;
private List<String[]> phoneNumbers;
private List<String> emails;
private Date createdAt;
private Date updatedAt;
…(setter/getter略)…
private int id;
private int age;
private long createdAt;
private long updatedAt;
日付はlongで
表せるので
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 14
プリミティブ型利用によりメモリー使用量削減
num #instances #bytes class name
----------------------------------------------
1: 28000195 896008088 [Ljava.lang.String;
2: 14000519 812030088 [Ljava.lang.Object;
3: 7000000 392000000 geodemeetup2.object.optimize.person.PrimitiveObjectPerson
4: 14000007 336000168 java.util.ArrayList
5: 7000000 280000000 geodemeetup2.object.optimize.person.PrimitiveObjectAddress
6: 7000101 168003768 [I
7: 2639 402240 [C
8: 2557 61368 java.lang.String
9: 491 55976 java.lang.Class
10: 785 31400 java.util.TreeMap$Entry
11: 9 25008 [B
12: 283 11320 java.util.LinkedHashMap$Entry
13: 158 10112 java.net.URL
14: 283 6792 java.io.ExpiringCache$Entry
15: 69 4968 java.lang.reflect.Field
16: 256 4096 java.lang.Integer
17: 10 3760 java.lang.Thread
…
Total 77009353 2884700216
Date、Integerは
出現しなくなった
オブジェクト数、
バイト数ともに削減
(約780MB)Total 119019230 3669289272
before
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 15
オブジェクト内のすべてのフィールドを1つのバイト配列とし
て保持!
通常のオブジェクト
究極のオーバーヘッド削減コンセプト
Person
String firstName
String lastName
Integer age
Address address
Integer[] phoneNumber
Taro
Yamada
32
03 1234 5678
Taro
Yamada
32
03 1234 5678
YY-ZZ ABCマンションNNN2 1 2神奈川県横浜市XX区YY-ZZ ABCマンションNNN
1つのバイト配列としたオブジェクト
列挙型
共有オブジェクト
Person
byte[] data Taro Yamada 32 0312345678
String[] prefectureList 東京都,神奈川県,埼玉県,…
String[] cityList 横浜市,川崎市,…
YY-ZZ ABCマンションNNN2 1 2
1つのbyte配列として
保持することで
オーバーヘッドを0へ
リスト型データの場合、
内部的にリスト番号で
保持することにより
さらにデータを削減
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 16
バイト配列オブジェクトのメモリー使用量
Javaのオーバーヘッドを大幅に削減!
45.5 GB
8.4 GB
44.5 GB
8.4 GB
45.7 GB
8.4 GB
44.2 GB
8.7 GB
0.0 GB
20.0 GB
40.0 GB
60.0 GB
80.0 GB
100.0 GB
120.0 GB
140.0 GB
160.0 GB
180.0 GB
実測値(オブジェクト) 実測値(バイト配列)
Server1 Server2 Server3 Server4
約81%
削減
179.9 GB
33.9 GB
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 17
加えて、GC処理の発生を大幅に低減
メモリー使用量の削減のみならず、GCへの影響を極小化し
てパフォーマンスも向上!
22.8 sec
12.2 sec
22.9 sec
12.1 sec
22.8 sec
12.1 sec
22.8 sec
12.0 sec
0.0 sec
10.0 sec
20.0 sec
30.0 sec
40.0 sec
50.0 sec
60.0 sec
70.0 sec
80.0 sec
90.0 sec
100.0 sec
オブジェクト バイト配列
GC時間
Server1 Server2 Server3 Server4
オブジェクト数が少ないため
GC時間も少ない
91.2 sec
48.3 sec
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 18
バイト配列オブジェクトの実装
オブジェクト内部のデータはバイト配列のみ
public class ObjectPerson
implements Serializable {
private Integer id;
private String firstName;
…
public class BinaryPerson
implements Externalizable {
private byte[] data = new byte[150];
通常のオブジェクトの場合 バイト配列オブジェクトの場合
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 19
バイト配列オブジェクトの実装
アクセサ(setter,getter)呼び出し時にバイト配列を検索
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
int offset = 0;
int val = id.intValue();
data[offset] = (byte) (val >>> 24);
data[offset + 1] = (byte) (val >>> 16);
data[offset + 2] = (byte) (val >>> 8);
data[offset + 3] = (byte) (val);
}
public Integer getId() {
int offset = 0;
int val = 0;
for (int i = 0; i < 4; i++)
val = (val << 8) + (data[offset + i] & 0xff);
return Integer.valueOf(val);
}
通常のオブジェクトの場合 バイト配列オブジェクトの場合
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 20
バイト配列オブジェクトの実装
アクセサ(setter,getter)呼び出し時にバイト配列を検索
public void setFirstName(
String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
int offset = 22;
String val = firstName;
byte[] bytes = val.getBytes();
int newLen = data.length + 2 + bytes.length;
byte[] newBytes = new byte[newLen];
System.arraycopy(data, 0, newBytes, 0, data.length);
data = newBytes;
data[offset] = (byte) (bytes.length >>> 8);
data[offset + 1] = (byte) (bytes.length);
System.arraycopy(data, offset + 2,
bytes, 0, bytes.length);
}
public String getFirstName() {
int offset = 22;
int len = 0;
for (int i = 0; i < 2; i++)
len = (len << 8) + (data[offset + i] & 0xff);
byte[] byteString = new byte[(short) len];
System.arraycopy(data, offset + 2, byteString, 0, len);
return new String(byteString);
}
通常のオブジェクトの場合 バイト配列オブジェクトの場合
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 21
バイト配列オブジェクトのjmap
num #instances #bytes class name
----------------------------------------------
1: 7000572 1568125136 [B
2: 7000000 112000000 geodemeetup2.object.optimize.person.BinaryPerson
3: 714 28049584 [Ljava.lang.Object;
4: 5264 617488 [C
5: 5181 124344 java.lang.String
6: 616 69752 java.lang.Class
7: 879 35160 java.util.LinkedHashMap$Entry
8: 785 31400 java.util.TreeMap$Entry
9: 305 19520 java.net.URL
10: 397 18224 [Ljava.lang.String;
11: 529 16928 java.util.HashMap$Node
12: 130 12480 java.util.jar.JarFile$JarFileEntry
13: 24 11584 [Ljava.util.HashMap$Node;
14: 138 11040 [Ljava.util.WeakHashMap$Entry;
15: 269 10760 java.lang.ref.Finalizer
16: 135 8640 java.util.jar.JarFile
…
Total 14019353 1709288312
ほぼバイト配列
のみ!
もとのオブジェクトから
約2GB削減!
Total 119019230 3669289272
before
ULS 22
Copyright © 2011-2013 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by
通信レイテンシー
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 23
Apache GeodeではPut等のデータ操作処理においてサーバ
を跨いだ通信が発生
データ分散による通信
サーバ#1
オブジェクト
シリアライズ処理
バイト配列
サーバ#2
オブジェクト
デシリアライズ処理
バイト配列
通信
Put等
Event Latency
CPUキャッシュアクセス(L2) 3 ns
メモリーアクセス 120 ns
SSDディスク I/O 150,000 ns
同一データセンター内通信 500,000 ns
ディスク I/O 10,000,000 ns
通信は、メモリーで完
結する処理に比べ、
4000倍以上も開きが
ある
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 24
高速処理を行うためには、次の2つが重要!
高速処理を実現する上で大事なこと
パフォーマンス
シリアライズ
処理時間
通信時間= +
高速シリアライザー
通信プロトコル
と
コンパクトなデータ
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 25
シリアライズ処理とは
メモリー上に存在する情報を、ネットワークを超えた別の
JVMでも、同じデータとして扱えるようにする形式へ変換す
ること
メモリー(Javaヒープ)
T a r o 3 2
Y a m a d a
t a r o . y a m a d
a @ e x a m p l e . c o m
Person
String firstName Taro
String lastName Yamada
Integer age 32
String Email taro.yamada@example.com
<Person>
<firstName>Taro</firstName>
<lastName>Yamada</lastName>
<age>32</age>
</Person>
{
"firstName" : "Taro",
"lastName" : "Yamada",
"age" : 32
}
XMLの場合 JSONの場合
TaroYamada32
バイナリーの場合
代表的なシリアライズ形式
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 26
通信プロトコル
Geodeではアプリケーションの特性やクラスタ構成によって
次のプロトコルが選択可能
通信箇所 通信プロトコル
クラスタ間の通信
TCP
(デフォルト)
信頼性が高いが低速
UDPユニキャスト
TCPより信頼性が低いが高速
※独自にデータの到達確認を行い
信頼性を向上させている
UDPマルチキャスト 大規模クラスタで有効
クライアント-サーバ
間の通信
TCP
クライアント
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 27
シリアライズ/デシリアライズ
通信の際のデータのシリアライズ/デシリアライズ処理は選択することが
可能
オブジェクトの更新部分が一定となる場合は差分のみのシリアライズを
行うことで通信時のデータサイズをさらに圧縮することが出来る
シリアライズ方式 備考
Java標準の方式
(java.io.Serializable)
Java以外のクライアントと通
信することが出来ない
Geode独自の高速シリアライズ方式
(com.gemstone.gemfire.DataSerializable)
処理速度は最速となる
PDX方式(Geode独自)
(Portable Data eXchange)
異なるバージョンのオブジェク
トでも通信することが出来る
シリアライズ方式毎の処理速度の比較
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 28
まとめ
Javaオブジェクトのメモリー使用量
–Javaのオーバーヘッドは予想以上に大きい
–プリミティブ型の方がメモリー使用量は少ない
–オブジェクト内部を1つのバイト配列で表現するのが究極
–オブジェクト数の削減はGC処理にも効果あり
通信レイテンシー
–高速処理を実現するためには以下の選択が重要
通信プロトコル
高速シリアライザー
通信データをコンパクトに
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 29
宣伝:簡易にメモリー使用量の削減できる!
Memory Optimizer

More Related Content

What's hot

コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
Yuta Shimada
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろう
Shingo Omura
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
MITSUNARI Shigeo
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
 
地理分散DBについて
地理分散DBについて地理分散DBについて
地理分散DBについて
Kumazaki Hiroki
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
Uptime Technologies LLC (JP)
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
 
OSvの概要と実装
OSvの概要と実装OSvの概要と実装
OSvの概要と実装
Takuya ASADA
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
Takuto Wada
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
MITSUNARI Shigeo
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
 
Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2...
Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2...Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2...
Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2...
Scalar, Inc.
 
Native Memory Tracking
Native Memory TrackingNative Memory Tracking
Native Memory Tracking
Takahiro YAMADA
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Seiya Mizuno
 

What's hot (20)

コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろう
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
地理分散DBについて
地理分散DBについて地理分散DBについて
地理分散DBについて
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
OSvの概要と実装
OSvの概要と実装OSvの概要と実装
OSvの概要と実装
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2...
Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2...Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2...
Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2...
 
Native Memory Tracking
Native Memory TrackingNative Memory Tracking
Native Memory Tracking
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
 

Viewers also liked

Geode hands-on
Geode hands-onGeode hands-on
Geode hands-on
Masaki Yamakawa
 
20171118 jjug snappydata
20171118 jjug snappydata20171118 jjug snappydata
20171118 jjug snappydata
Masaki Yamakawa
 
Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門
Takuya Okada
 
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Kohei Saito
 
JJUG初心者のためのJava/JJUG講座
JJUG初心者のためのJava/JJUG講座JJUG初心者のためのJava/JJUG講座
JJUG初心者のためのJava/JJUG講座
Yusuke Suzuki
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
Masatoshi Tada
 

Viewers also liked (7)

Geode hands-on
Geode hands-onGeode hands-on
Geode hands-on
 
20171118 jjug snappydata
20171118 jjug snappydata20171118 jjug snappydata
20171118 jjug snappydata
 
Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門Java9を迎えた今こそ!Java本格(再)入門
Java9を迎えた今こそ!Java本格(再)入門
 
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
 
JJUG初心者のためのJava/JJUG講座
JJUG初心者のためのJava/JJUG講座JJUG初心者のためのJava/JJUG講座
JJUG初心者のためのJava/JJUG講座
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
 

Similar to インメモリーで超高速処理を実現する場合のカギ

2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services
Naoto Gohko
 
Aerospike deep dive LDTs
Aerospike deep dive LDTsAerospike deep dive LDTs
Aerospike deep dive LDTs
Masaki Toyoshima
 
HeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical PreviewHeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical Preview
Yuji Kubota
 
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
VirtualTech Japan Inc.
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
tako pons
 
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumilab
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
Takahiro Iwase
 
20200414 Advanced Features in Amazon Elasticsearch Service
20200414 Advanced Features in Amazon Elasticsearch Service20200414 Advanced Features in Amazon Elasticsearch Service
20200414 Advanced Features in Amazon Elasticsearch Service
Amazon Web Services Japan
 
Jubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatus分類器の活用テクニック
Jubatus分類器の活用テクニック
JubatusOfficial
 
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
VirtualTech Japan Inc.
 
Lucas apa pacsec_slides_jp-final
Lucas apa pacsec_slides_jp-finalLucas apa pacsec_slides_jp-final
Lucas apa pacsec_slides_jp-final
PacSecJP
 
OpenStack, Hadoop -- OSSクラウドの最新動向
OpenStack, Hadoop -- OSSクラウドの最新動向OpenStack, Hadoop -- OSSクラウドの最新動向
OpenStack, Hadoop -- OSSクラウドの最新動向
Masanori Itoh
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
Ohyama Masanori
 
VIRLとPyATSで実現するネットワークCI
VIRLとPyATSで実現するネットワークCIVIRLとPyATSで実現するネットワークCI
VIRLとPyATSで実現するネットワークCI
tetsusat
 
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
VirtualTech Japan Inc.
 
Elastic ML Introduction
Elastic ML IntroductionElastic ML Introduction
Elastic ML Introduction
Hiroshi Yoshioka
 
DynamoDBの初心者に伝えたい初めて触るときの勘所
DynamoDBの初心者に伝えたい初めて触るときの勘所DynamoDBの初心者に伝えたい初めて触るときの勘所
DynamoDBの初心者に伝えたい初めて触るときの勘所
Ryo Sasaki
 
Packetbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用までPacketbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用まで
Satoyuki Tsukano
 
ついにリリース!! MySQL 8.0 最新情報
ついにリリース!! MySQL 8.0 最新情報ついにリリース!! MySQL 8.0 最新情報
ついにリリース!! MySQL 8.0 最新情報
yoyamasaki
 

Similar to インメモリーで超高速処理を実現する場合のカギ (20)

2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services
 
Aerospike deep dive LDTs
Aerospike deep dive LDTsAerospike deep dive LDTs
Aerospike deep dive LDTs
 
HeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical PreviewHeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical Preview
 
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
 
20200414 Advanced Features in Amazon Elasticsearch Service
20200414 Advanced Features in Amazon Elasticsearch Service20200414 Advanced Features in Amazon Elasticsearch Service
20200414 Advanced Features in Amazon Elasticsearch Service
 
Jubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatus分類器の活用テクニック
Jubatus分類器の活用テクニック
 
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
 
Lucas apa pacsec_slides_jp-final
Lucas apa pacsec_slides_jp-finalLucas apa pacsec_slides_jp-final
Lucas apa pacsec_slides_jp-final
 
OpenStack, Hadoop -- OSSクラウドの最新動向
OpenStack, Hadoop -- OSSクラウドの最新動向OpenStack, Hadoop -- OSSクラウドの最新動向
OpenStack, Hadoop -- OSSクラウドの最新動向
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
 
VIRLとPyATSで実現するネットワークCI
VIRLとPyATSで実現するネットワークCIVIRLとPyATSで実現するネットワークCI
VIRLとPyATSで実現するネットワークCI
 
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
 
Elastic ML Introduction
Elastic ML IntroductionElastic ML Introduction
Elastic ML Introduction
 
DynamoDBの初心者に伝えたい初めて触るときの勘所
DynamoDBの初心者に伝えたい初めて触るときの勘所DynamoDBの初心者に伝えたい初めて触るときの勘所
DynamoDBの初心者に伝えたい初めて触るときの勘所
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
Packetbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用までPacketbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用まで
 
ついにリリース!! MySQL 8.0 最新情報
ついにリリース!! MySQL 8.0 最新情報ついにリリース!! MySQL 8.0 最新情報
ついにリリース!! MySQL 8.0 最新情報
 

More from Masaki Yamakawa

20231111_YugabyteDB-on-k8s.pdf
20231111_YugabyteDB-on-k8s.pdf20231111_YugabyteDB-on-k8s.pdf
20231111_YugabyteDB-on-k8s.pdf
Masaki Yamakawa
 
20221117_クラウドネイティブ向けYugabyteDB活用シナリオ
20221117_クラウドネイティブ向けYugabyteDB活用シナリオ20221117_クラウドネイティブ向けYugabyteDB活用シナリオ
20221117_クラウドネイティブ向けYugabyteDB活用シナリオ
Masaki Yamakawa
 
20220331_DSSA_MigrationToYugabyteDB
20220331_DSSA_MigrationToYugabyteDB20220331_DSSA_MigrationToYugabyteDB
20220331_DSSA_MigrationToYugabyteDB
Masaki Yamakawa
 
20211118 dbts2021 マイクロサービスにおけるApache Geodeの効果的な使い方
20211118 dbts2021 マイクロサービスにおけるApache Geodeの効果的な使い方20211118 dbts2021 マイクロサービスにおけるApache Geodeの効果的な使い方
20211118 dbts2021 マイクロサービスにおけるApache Geodeの効果的な使い方
Masaki Yamakawa
 
20190523 IMC meetup-IMDG&DS
20190523 IMC meetup-IMDG&DS20190523 IMC meetup-IMDG&DS
20190523 IMC meetup-IMDG&DS
Masaki Yamakawa
 
20181031 springfest spring data geode
20181031 springfest spring data geode20181031 springfest spring data geode
20181031 springfest spring data geode
Masaki Yamakawa
 
Apache geode at-s1p
Apache geode at-s1pApache geode at-s1p
Apache geode at-s1p
Masaki Yamakawa
 
20180217 hackertackle geode
20180217 hackertackle geode20180217 hackertackle geode
20180217 hackertackle geode
Masaki Yamakawa
 
20171125 springfest snappydata
20171125 springfest snappydata20171125 springfest snappydata
20171125 springfest snappydata
Masaki Yamakawa
 
インメモリーデータグリッドの選択肢
インメモリーデータグリッドの選択肢インメモリーデータグリッドの選択肢
インメモリーデータグリッドの選択肢
Masaki Yamakawa
 

More from Masaki Yamakawa (10)

20231111_YugabyteDB-on-k8s.pdf
20231111_YugabyteDB-on-k8s.pdf20231111_YugabyteDB-on-k8s.pdf
20231111_YugabyteDB-on-k8s.pdf
 
20221117_クラウドネイティブ向けYugabyteDB活用シナリオ
20221117_クラウドネイティブ向けYugabyteDB活用シナリオ20221117_クラウドネイティブ向けYugabyteDB活用シナリオ
20221117_クラウドネイティブ向けYugabyteDB活用シナリオ
 
20220331_DSSA_MigrationToYugabyteDB
20220331_DSSA_MigrationToYugabyteDB20220331_DSSA_MigrationToYugabyteDB
20220331_DSSA_MigrationToYugabyteDB
 
20211118 dbts2021 マイクロサービスにおけるApache Geodeの効果的な使い方
20211118 dbts2021 マイクロサービスにおけるApache Geodeの効果的な使い方20211118 dbts2021 マイクロサービスにおけるApache Geodeの効果的な使い方
20211118 dbts2021 マイクロサービスにおけるApache Geodeの効果的な使い方
 
20190523 IMC meetup-IMDG&DS
20190523 IMC meetup-IMDG&DS20190523 IMC meetup-IMDG&DS
20190523 IMC meetup-IMDG&DS
 
20181031 springfest spring data geode
20181031 springfest spring data geode20181031 springfest spring data geode
20181031 springfest spring data geode
 
Apache geode at-s1p
Apache geode at-s1pApache geode at-s1p
Apache geode at-s1p
 
20180217 hackertackle geode
20180217 hackertackle geode20180217 hackertackle geode
20180217 hackertackle geode
 
20171125 springfest snappydata
20171125 springfest snappydata20171125 springfest snappydata
20171125 springfest snappydata
 
インメモリーデータグリッドの選択肢
インメモリーデータグリッドの選択肢インメモリーデータグリッドの選択肢
インメモリーデータグリッドの選択肢
 

Recently uploaded

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 

Recently uploaded (16)

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 

インメモリーで超高速処理を実現する場合のカギ

  • 1. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by Apache GEODE Meetup Tokyo #2 インメモリーで超高速処理を実現する場合のカギ 2016/10/11 ウルシステムズ株式会社 http://www.ulsystems.co.jp mailto:info@ulsystems.co.jp Tel: 03-6220-1420 Fax: 03-6220-1402
  • 2. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 1 About Me 山河 征紀 Business Private • GEODE歴:9年(Since 2008) • GEODEバグ報告数:nnn 件 • マラソン • 横浜マラソン2016:4h17m • 目標は今年度中のサブ4 • 登山 • 目標はココ
  • 3. ULS 2 Copyright © 2011-2013 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by インメモリーで 超高速処理を実現する場合のカギ
  • 4. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 3 処理に応じてデータの分散を繰り返す Apache Geodeでの大量データ処理 処理A 処理B 処理C 処理A 処理B 処理C 処理A 処理B 処理C パーティション リージョン パーティション リージョン パーティション リージョン パーティション リージョン どうしてもメモリーにのらないデータはDiskやRDBへ保持 高速に処理を行うためには、 たくさんのオブジェクトをメモリーへのせることが重要!
  • 5. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 4 リージョンのおさらい リージョンとは分散するデータを保持する入れ物のこと データの特性によってレプリケーションとパーティションを 使い分ける パーティションレプリケーション すべてのマシンで同一のデータ を保持する 何れかのマシンにデータが存在 する 今回の例で言うと 処理への入出力データは「パーティションリージョン」 マスターデータは「レプリケーションリージョン」
  • 6. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 5 データは、Javaのヒープメモリ上にJavaのオブジェクトと して管理される Geodeにおけるデータ管理 JVM Cache Region Key Value ABC GGG XYG Region … Region … • インメモリデータへのエントリポイント • アプリケーションはキャッシュを介して、データへの一連の操作を行う • 任意のリージョンにより構成 • 論理的なデータのグループ(RDBにおけるテーブルのイメージ) • Key-Value形式でのデータ管理 • 任意のオブジェクトに対して、一意のKeyを指定 • スキーマの概念はなく、任意のオブジェクトを格納 Cache Region public class Employee { private int employeeNo; private String firstName; private String lastName; private String deptCode; ・・・ ・・・ }
  • 7. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 6 1. Javaオブジェクトのメモリー使用量 2. 通信レイテンシー 今日、お話したいこと 処理A 処理B 処理C 処理A 処理B 処理C 処理A 処理B 処理C パーティション リージョン パーティション リージョン パーティション リージョン パーティション リージョン
  • 8. ULS 7 Copyright © 2011-2013 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by Javaオブジェクトのメモリー使用量
  • 9. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 8 Apache Geodeのメモリー使用量 1億件のオブジェクトをデータ分散してみると… public class ObjectPerson implements Serializable { private Integer id; private String firstName; private String lastName; private Integer age; private Address address; private List<String[]> phoneNumbers; private List<String> emails; private Date createdAt; private Date updatedAt; …(setter/getter略)… JVM サーバ JVM サーバ JVM サーバ JVM サーバ 1億件 データ分散 (パーティション) 1オブジェクト のサイズ 200byte (感覚値) 全体サイズ 20GB (200byte×1億件) 1Nodeあたり メモリ使用量 5GB (20GB÷4Node) 見積値 (感覚)
  • 10. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 9 Apache Geodeのメモリー使用量 予想を大幅に超えるメモリー使用量! 0.0 GB 20.0 GB 40.0 GB 60.0 GB 80.0 GB 100.0 GB 120.0 GB 140.0 GB 160.0 GB 180.0 GB 見積値 実測値 Server1 Server2 Server3 Server4 見積値の 約9倍! 44.2 GB 45.7 GB 44.5 GB 45.5 GB 179.9 GB 20.0 GB
  • 11. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 10 なぜJavaオブジェクトが肥大化するのか Javaでは、フィールドが何もないオブジェクトを生成するだ けでも、メモリーを消費してしまう public class EmptyObject { } public class NullSetObject { private String str01 = null; (略) private String str50 = null; private Integer int01 = null; (略) private Integer int50 = null; } String, Integerそれぞれ50個あり、 すべてnullを設定したオブジェクト フィールドがひとつもない オブジェクト それぞれ100万オブジェクト生成し、生成にかかった時間とメモリー使用 量を測定した結果は… EmptyObject NullSetObject 生成時間 17 ms 382 ms メモリー使用量 33.5 MB 430.2 MB 22倍も遅い 13倍も多い
  • 12. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 11 Stringのために88Byte必要 int配列4Byteのために32Byte必要 なぜJavaオブジェクトが肥大化するのか オブジェクトを1つ生成する毎に、標準のメタデータが必要! メタデータ:クラスポインター、状態フラグ、同期情報フラグなど 標準のメタデータ int 0 24 28 [Byte] 標準のメタデータ サイズ int 0 24 32 [Byte]36 標準のメタデータ Obj固有のメタデータ ポインタ char char標準のメタデータ サイズ char ・・・ 0 5624 48 0 3824 32 int用の4Byteのために24Byte必要 数値をIntegerで保持する場合 数値配列をInteger配列で保持する場合 Stringの場合
  • 13. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 12 jmapによりオブジェクト数を確認してみると… num #instances #bytes class name ---------------------------------------------- 1: 28000397 896018224 [Ljava.lang.String; 2: 14000714 812049584 [Ljava.lang.Object; 3: 28000000 672000000 java.util.Date 4: 14000012 336000288 java.util.ArrayList 5: 7000000 336000000 geodemeetup2.object.optimize.person.ObjectPerson 6: 14000128 224002048 java.lang.Integer 7: 7000000 224000000 geodemeetup2.object.optimize.person.ObjectAddress 8: 7000001 168001040 [Ljava.lang.Integer; 9: 5254 616936 [C 10: 575 126992 [B 11: 5171 124104 java.lang.String 12: 614 69544 java.lang.Class 13: 879 35160 java.util.LinkedHashMap$Entry 14: 785 31400 java.util.TreeMap$Entry 15: 305 19520 java.net.URL 16: 529 16928 java.util.HashMap$Node 17: 130 12480 java.util.jar.JarFile$JarFileEntry 18: 24 11584 [Ljava.util.HashMap$Node; 19: 138 11040 [Ljava.util.WeakHashMap$Entry; 20: 271 10840 java.lang.ref.Finalizer 21: 135 8640 java.util.jar.JarFile … Total 119019230 3669289272 Dateだけで 670MB! Integerと配列 を合わせて 390MB!
  • 14. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 13 オブジェクトではなくプリミティブ型を使用 プリミティブ型を使用すれば、このオーバーヘッドは削減で きる public class ObjectPerson implements Serializable { private Integer id; private String firstName; private String lastName; private Integer age; private Address address; private List<String[]> phoneNumbers; private List<String> emails; private Date createdAt; private Date updatedAt; …(setter/getter略)… private int id; private int age; private long createdAt; private long updatedAt; 日付はlongで 表せるので
  • 15. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 14 プリミティブ型利用によりメモリー使用量削減 num #instances #bytes class name ---------------------------------------------- 1: 28000195 896008088 [Ljava.lang.String; 2: 14000519 812030088 [Ljava.lang.Object; 3: 7000000 392000000 geodemeetup2.object.optimize.person.PrimitiveObjectPerson 4: 14000007 336000168 java.util.ArrayList 5: 7000000 280000000 geodemeetup2.object.optimize.person.PrimitiveObjectAddress 6: 7000101 168003768 [I 7: 2639 402240 [C 8: 2557 61368 java.lang.String 9: 491 55976 java.lang.Class 10: 785 31400 java.util.TreeMap$Entry 11: 9 25008 [B 12: 283 11320 java.util.LinkedHashMap$Entry 13: 158 10112 java.net.URL 14: 283 6792 java.io.ExpiringCache$Entry 15: 69 4968 java.lang.reflect.Field 16: 256 4096 java.lang.Integer 17: 10 3760 java.lang.Thread … Total 77009353 2884700216 Date、Integerは 出現しなくなった オブジェクト数、 バイト数ともに削減 (約780MB)Total 119019230 3669289272 before
  • 16. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 15 オブジェクト内のすべてのフィールドを1つのバイト配列とし て保持! 通常のオブジェクト 究極のオーバーヘッド削減コンセプト Person String firstName String lastName Integer age Address address Integer[] phoneNumber Taro Yamada 32 03 1234 5678 Taro Yamada 32 03 1234 5678 YY-ZZ ABCマンションNNN2 1 2神奈川県横浜市XX区YY-ZZ ABCマンションNNN 1つのバイト配列としたオブジェクト 列挙型 共有オブジェクト Person byte[] data Taro Yamada 32 0312345678 String[] prefectureList 東京都,神奈川県,埼玉県,… String[] cityList 横浜市,川崎市,… YY-ZZ ABCマンションNNN2 1 2 1つのbyte配列として 保持することで オーバーヘッドを0へ リスト型データの場合、 内部的にリスト番号で 保持することにより さらにデータを削減
  • 17. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 16 バイト配列オブジェクトのメモリー使用量 Javaのオーバーヘッドを大幅に削減! 45.5 GB 8.4 GB 44.5 GB 8.4 GB 45.7 GB 8.4 GB 44.2 GB 8.7 GB 0.0 GB 20.0 GB 40.0 GB 60.0 GB 80.0 GB 100.0 GB 120.0 GB 140.0 GB 160.0 GB 180.0 GB 実測値(オブジェクト) 実測値(バイト配列) Server1 Server2 Server3 Server4 約81% 削減 179.9 GB 33.9 GB
  • 18. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 17 加えて、GC処理の発生を大幅に低減 メモリー使用量の削減のみならず、GCへの影響を極小化し てパフォーマンスも向上! 22.8 sec 12.2 sec 22.9 sec 12.1 sec 22.8 sec 12.1 sec 22.8 sec 12.0 sec 0.0 sec 10.0 sec 20.0 sec 30.0 sec 40.0 sec 50.0 sec 60.0 sec 70.0 sec 80.0 sec 90.0 sec 100.0 sec オブジェクト バイト配列 GC時間 Server1 Server2 Server3 Server4 オブジェクト数が少ないため GC時間も少ない 91.2 sec 48.3 sec
  • 19. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 18 バイト配列オブジェクトの実装 オブジェクト内部のデータはバイト配列のみ public class ObjectPerson implements Serializable { private Integer id; private String firstName; … public class BinaryPerson implements Externalizable { private byte[] data = new byte[150]; 通常のオブジェクトの場合 バイト配列オブジェクトの場合
  • 20. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 19 バイト配列オブジェクトの実装 アクセサ(setter,getter)呼び出し時にバイト配列を検索 public void setId(Integer id) { this.id = id; } public Integer getId() { return id; } public void setId(Integer id) { int offset = 0; int val = id.intValue(); data[offset] = (byte) (val >>> 24); data[offset + 1] = (byte) (val >>> 16); data[offset + 2] = (byte) (val >>> 8); data[offset + 3] = (byte) (val); } public Integer getId() { int offset = 0; int val = 0; for (int i = 0; i < 4; i++) val = (val << 8) + (data[offset + i] & 0xff); return Integer.valueOf(val); } 通常のオブジェクトの場合 バイト配列オブジェクトの場合
  • 21. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 20 バイト配列オブジェクトの実装 アクセサ(setter,getter)呼び出し時にバイト配列を検索 public void setFirstName( String firstName) { this.firstName = firstName; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { int offset = 22; String val = firstName; byte[] bytes = val.getBytes(); int newLen = data.length + 2 + bytes.length; byte[] newBytes = new byte[newLen]; System.arraycopy(data, 0, newBytes, 0, data.length); data = newBytes; data[offset] = (byte) (bytes.length >>> 8); data[offset + 1] = (byte) (bytes.length); System.arraycopy(data, offset + 2, bytes, 0, bytes.length); } public String getFirstName() { int offset = 22; int len = 0; for (int i = 0; i < 2; i++) len = (len << 8) + (data[offset + i] & 0xff); byte[] byteString = new byte[(short) len]; System.arraycopy(data, offset + 2, byteString, 0, len); return new String(byteString); } 通常のオブジェクトの場合 バイト配列オブジェクトの場合
  • 22. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 21 バイト配列オブジェクトのjmap num #instances #bytes class name ---------------------------------------------- 1: 7000572 1568125136 [B 2: 7000000 112000000 geodemeetup2.object.optimize.person.BinaryPerson 3: 714 28049584 [Ljava.lang.Object; 4: 5264 617488 [C 5: 5181 124344 java.lang.String 6: 616 69752 java.lang.Class 7: 879 35160 java.util.LinkedHashMap$Entry 8: 785 31400 java.util.TreeMap$Entry 9: 305 19520 java.net.URL 10: 397 18224 [Ljava.lang.String; 11: 529 16928 java.util.HashMap$Node 12: 130 12480 java.util.jar.JarFile$JarFileEntry 13: 24 11584 [Ljava.util.HashMap$Node; 14: 138 11040 [Ljava.util.WeakHashMap$Entry; 15: 269 10760 java.lang.ref.Finalizer 16: 135 8640 java.util.jar.JarFile … Total 14019353 1709288312 ほぼバイト配列 のみ! もとのオブジェクトから 約2GB削減! Total 119019230 3669289272 before
  • 23. ULS 22 Copyright © 2011-2013 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 通信レイテンシー
  • 24. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 23 Apache GeodeではPut等のデータ操作処理においてサーバ を跨いだ通信が発生 データ分散による通信 サーバ#1 オブジェクト シリアライズ処理 バイト配列 サーバ#2 オブジェクト デシリアライズ処理 バイト配列 通信 Put等 Event Latency CPUキャッシュアクセス(L2) 3 ns メモリーアクセス 120 ns SSDディスク I/O 150,000 ns 同一データセンター内通信 500,000 ns ディスク I/O 10,000,000 ns 通信は、メモリーで完 結する処理に比べ、 4000倍以上も開きが ある
  • 25. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 24 高速処理を行うためには、次の2つが重要! 高速処理を実現する上で大事なこと パフォーマンス シリアライズ 処理時間 通信時間= + 高速シリアライザー 通信プロトコル と コンパクトなデータ
  • 26. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 25 シリアライズ処理とは メモリー上に存在する情報を、ネットワークを超えた別の JVMでも、同じデータとして扱えるようにする形式へ変換す ること メモリー(Javaヒープ) T a r o 3 2 Y a m a d a t a r o . y a m a d a @ e x a m p l e . c o m Person String firstName Taro String lastName Yamada Integer age 32 String Email taro.yamada@example.com <Person> <firstName>Taro</firstName> <lastName>Yamada</lastName> <age>32</age> </Person> { "firstName" : "Taro", "lastName" : "Yamada", "age" : 32 } XMLの場合 JSONの場合 TaroYamada32 バイナリーの場合 代表的なシリアライズ形式
  • 27. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 26 通信プロトコル Geodeではアプリケーションの特性やクラスタ構成によって 次のプロトコルが選択可能 通信箇所 通信プロトコル クラスタ間の通信 TCP (デフォルト) 信頼性が高いが低速 UDPユニキャスト TCPより信頼性が低いが高速 ※独自にデータの到達確認を行い 信頼性を向上させている UDPマルチキャスト 大規模クラスタで有効 クライアント-サーバ 間の通信 TCP クライアント
  • 28. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 27 シリアライズ/デシリアライズ 通信の際のデータのシリアライズ/デシリアライズ処理は選択することが 可能 オブジェクトの更新部分が一定となる場合は差分のみのシリアライズを 行うことで通信時のデータサイズをさらに圧縮することが出来る シリアライズ方式 備考 Java標準の方式 (java.io.Serializable) Java以外のクライアントと通 信することが出来ない Geode独自の高速シリアライズ方式 (com.gemstone.gemfire.DataSerializable) 処理速度は最速となる PDX方式(Geode独自) (Portable Data eXchange) 異なるバージョンのオブジェク トでも通信することが出来る シリアライズ方式毎の処理速度の比較
  • 29. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 28 まとめ Javaオブジェクトのメモリー使用量 –Javaのオーバーヘッドは予想以上に大きい –プリミティブ型の方がメモリー使用量は少ない –オブジェクト内部を1つのバイト配列で表現するのが究極 –オブジェクト数の削減はGC処理にも効果あり 通信レイテンシー –高速処理を実現するためには以下の選択が重要 通信プロトコル 高速シリアライザー 通信データをコンパクトに
  • 30. ULS Copyright © 2011-2016 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 29 宣伝:簡易にメモリー使用量の削減できる! Memory Optimizer