Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
MY
Uploaded by
Masaki Yamakawa
PDF, PPTX
2,664 views
インメモリーで超高速処理を実現する場合のカギ
Apache GEODE Meetup Tokyo #2 の資料です。
Technology
◦
Read more
5
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 30
2
/ 30
3
/ 30
4
/ 30
5
/ 30
6
/ 30
7
/ 30
8
/ 30
9
/ 30
10
/ 30
11
/ 30
12
/ 30
13
/ 30
14
/ 30
15
/ 30
16
/ 30
17
/ 30
18
/ 30
19
/ 30
20
/ 30
21
/ 30
22
/ 30
23
/ 30
24
/ 30
25
/ 30
26
/ 30
27
/ 30
28
/ 30
29
/ 30
30
/ 30
More Related Content
PDF
超高速処理とスケーラビリティを両立するApache GEODE
by
Masaki Yamakawa
PPTX
私はここでつまづいた! Oracle database 11g から 12cへのアップグレードと Oracle Database 12c の新機能@201...
by
yoshimotot
PDF
Dbts2013 特濃jpoug log_file_sync
by
Koji Shinkubo
PDF
45分で理解する SQL Serverでできることできないこと
by
Insight Technology, Inc.
PPTX
Oracle Database Vaultのご紹介
by
オラクルエンジニア通信
PDF
Oracle GoldenGate 19c を使用した 簡単データベース移行ガイド_v1.0
by
オラクルエンジニア通信
PPTX
Oracle Advanced Security Transparent Data Encryptionのご紹介
by
オラクルエンジニア通信
PDF
Oracle使用者安全設定
by
Chien Chung Shen
超高速処理とスケーラビリティを両立するApache GEODE
by
Masaki Yamakawa
私はここでつまづいた! Oracle database 11g から 12cへのアップグレードと Oracle Database 12c の新機能@201...
by
yoshimotot
Dbts2013 特濃jpoug log_file_sync
by
Koji Shinkubo
45分で理解する SQL Serverでできることできないこと
by
Insight Technology, Inc.
Oracle Database Vaultのご紹介
by
オラクルエンジニア通信
Oracle GoldenGate 19c を使用した 簡単データベース移行ガイド_v1.0
by
オラクルエンジニア通信
Oracle Advanced Security Transparent Data Encryptionのご紹介
by
オラクルエンジニア通信
Oracle使用者安全設定
by
Chien Chung Shen
What's hot
PDF
Oracle Data Integrator R12.2.1.1 Studio及びRepositoryセットアップガイド
by
オラクルエンジニア通信
PPTX
Metaspace
by
Yasumasa Suenaga
PDF
簡単!AWRをEXCELピボットグラフで分析しよう♪
by
Yohei Azekatsu
PDF
Zero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャ
by
オラクルエンジニア通信
PPT
DataGuard体験記
by
Shinnosuke Akita
PDF
会社でClojure使ってみて分かったこと
by
Recruit Technologies
PPTX
Keycloak入門
by
Hiroyuki Wada
PDF
2018 builderscon airflowを用いて、 複雑大規模なジョブフロー管理 に立ち向かう
by
BrainPad Inc.
PDF
Always on 可用性グループ 構築時のポイント
by
Masayuki Ozawa
PDF
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
by
Masahiko Sawada
PDF
Open Liberty / WebSphere Liberty
by
Takakiyo Tanaka
PDF
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
by
Masayuki Ozawa
PDF
Oracle SGA 介紹
by
Chien Chung Shen
PDF
[Oracle DBA & Developer Day 2012] 高可用性システムに適した管理性と性能を向上させるASM と RMAN の魅力
by
オラクルエンジニア通信
PDF
Zero Data Loss Recovery Applianceのご紹介
by
オラクルエンジニア通信
PDF
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
by
Takahiro YAMADA
PDF
Oracle GoldenGate for Big Data 12.2 セットアップガイド
by
オラクルエンジニア通信
PDF
Oracle GoldenGate入門
by
オラクルエンジニア通信
PDF
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
by
オラクルエンジニア通信
PDF
Oracle GoldenGate EM Plugin 13c セットアップガイド
by
オラクルエンジニア通信
Oracle Data Integrator R12.2.1.1 Studio及びRepositoryセットアップガイド
by
オラクルエンジニア通信
Metaspace
by
Yasumasa Suenaga
簡単!AWRをEXCELピボットグラフで分析しよう♪
by
Yohei Azekatsu
Zero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャ
by
オラクルエンジニア通信
DataGuard体験記
by
Shinnosuke Akita
会社でClojure使ってみて分かったこと
by
Recruit Technologies
Keycloak入門
by
Hiroyuki Wada
2018 builderscon airflowを用いて、 複雑大規模なジョブフロー管理 に立ち向かう
by
BrainPad Inc.
Always on 可用性グループ 構築時のポイント
by
Masayuki Ozawa
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
by
Masahiko Sawada
Open Liberty / WebSphere Liberty
by
Takakiyo Tanaka
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
by
Masayuki Ozawa
Oracle SGA 介紹
by
Chien Chung Shen
[Oracle DBA & Developer Day 2012] 高可用性システムに適した管理性と性能を向上させるASM と RMAN の魅力
by
オラクルエンジニア通信
Zero Data Loss Recovery Applianceのご紹介
by
オラクルエンジニア通信
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
by
Takahiro YAMADA
Oracle GoldenGate for Big Data 12.2 セットアップガイド
by
オラクルエンジニア通信
Oracle GoldenGate入門
by
オラクルエンジニア通信
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
by
オラクルエンジニア通信
Oracle GoldenGate EM Plugin 13c セットアップガイド
by
オラクルエンジニア通信
Viewers also liked
PDF
Geode hands-on
by
Masaki Yamakawa
PDF
20171118 jjug snappydata
by
Masaki Yamakawa
PDF
Java9を迎えた今こそ!Java本格(再)入門
by
Takuya Okada
PPTX
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
by
Kohei Saito
PDF
JJUG初心者のためのJava/JJUG講座
by
Yusuke Suzuki
PDF
Java SE 9の紹介: モジュール・システムを中心に
by
Taku Miyakawa
Geode hands-on
by
Masaki Yamakawa
20171118 jjug snappydata
by
Masaki Yamakawa
Java9を迎えた今こそ!Java本格(再)入門
by
Takuya Okada
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
by
Kohei Saito
JJUG初心者のためのJava/JJUG講座
by
Yusuke Suzuki
Java SE 9の紹介: モジュール・システムを中心に
by
Taku Miyakawa
Similar to インメモリーで超高速処理を実現する場合のカギ
PPTX
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
by
JustSystems Corporation
PPTX
省メモリーに関するデザインパターン 2011.04.18
by
Minoru Chikamune
PPTX
第六回渋谷Java Java8のJVM監視を考える
by
chonaso
PDF
Javaにおけるデータシリアライズと圧縮
by
moai kids
PPT
オブジェクト指向入門7
by
Kenta Hattori
PDF
[豆ナイト]Java small object programming
by
Yuichi Hasegawa
PDF
Java オブジェクトの内部構造
by
Taku Miyakawa
PDF
これからのコンピューティングとJava(Hacker Tackle)
by
なおき きしだ
PDF
詳解Dexファイルフォーマット
by
Takuya Matsunaga
PDF
インメモリーデータグリッドの選択肢
by
Masaki Yamakawa
PDF
第1回内容の振り返り
by
skowata
PDF
第3回勉強会 オブジェクト指向
by
hakoika-itwg
PPTX
低レイヤから見たrubyプログラミング
by
よしだ あつし
PDF
【Unity道場スペシャル 2018京都】プロなら当然!プログラミング技能解説
by
Unity Technologies Japan K.K.
PDF
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
by
なおき きしだ
PDF
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
by
Yoshifumi Kawai
PDF
20190523 IMC meetup-IMDG&DS
by
Masaki Yamakawa
KEY
関ジャバ JavaOne Tokyo 2012報告会
by
Koichi Sakata
PDF
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
by
和弘 井之上
PDF
みんな大好きJava gc入門 【前編】
by
kouzirou tenkubashi
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
by
JustSystems Corporation
省メモリーに関するデザインパターン 2011.04.18
by
Minoru Chikamune
第六回渋谷Java Java8のJVM監視を考える
by
chonaso
Javaにおけるデータシリアライズと圧縮
by
moai kids
オブジェクト指向入門7
by
Kenta Hattori
[豆ナイト]Java small object programming
by
Yuichi Hasegawa
Java オブジェクトの内部構造
by
Taku Miyakawa
これからのコンピューティングとJava(Hacker Tackle)
by
なおき きしだ
詳解Dexファイルフォーマット
by
Takuya Matsunaga
インメモリーデータグリッドの選択肢
by
Masaki Yamakawa
第1回内容の振り返り
by
skowata
第3回勉強会 オブジェクト指向
by
hakoika-itwg
低レイヤから見たrubyプログラミング
by
よしだ あつし
【Unity道場スペシャル 2018京都】プロなら当然!プログラミング技能解説
by
Unity Technologies Japan K.K.
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
by
なおき きしだ
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
by
Yoshifumi Kawai
20190523 IMC meetup-IMDG&DS
by
Masaki Yamakawa
関ジャバ JavaOne Tokyo 2012報告会
by
Koichi Sakata
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
by
和弘 井之上
みんな大好きJava gc入門 【前編】
by
kouzirou tenkubashi
More from Masaki Yamakawa
PDF
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup
by
Masaki Yamakawa
PDF
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
by
Masaki Yamakawa
PDF
20250729_Devin-for-Enterprise
by
Masaki Yamakawa
PDF
20250726_Devinで変えるエンプラシステム開発の未来
by
Masaki Yamakawa
PDF
20250717_Devin×GitHubCopilotで10人分の仕事は出来るのか?
by
Masaki Yamakawa
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜
by
Masaki Yamakawa
PDF
20250611_話題のDevin、エンプラ開発で〇人分の仕事はできるのか !?
by
Masaki Yamakawa
PDF
20231111_YugabyteDB-on-k8s.pdf
by
Masaki Yamakawa
PDF
20221117_クラウドネイティブ向けYugabyteDB活用シナリオ
by
Masaki Yamakawa
PDF
20220331_DSSA_MigrationToYugabyteDB
by
Masaki Yamakawa
PDF
20211118 dbts2021 マイクロサービスにおけるApache Geodeの効果的な使い方
by
Masaki Yamakawa
PDF
20181031 springfest spring data geode
by
Masaki Yamakawa
PDF
Apache geode at-s1p
by
Masaki Yamakawa
PDF
20180217 hackertackle geode
by
Masaki Yamakawa
PDF
20171125 springfest snappydata
by
Masaki Yamakawa
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup
by
Masaki Yamakawa
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
by
Masaki Yamakawa
20250729_Devin-for-Enterprise
by
Masaki Yamakawa
20250726_Devinで変えるエンプラシステム開発の未来
by
Masaki Yamakawa
20250717_Devin×GitHubCopilotで10人分の仕事は出来るのか?
by
Masaki Yamakawa
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜
by
Masaki Yamakawa
20250611_話題のDevin、エンプラ開発で〇人分の仕事はできるのか !?
by
Masaki Yamakawa
20231111_YugabyteDB-on-k8s.pdf
by
Masaki Yamakawa
20221117_クラウドネイティブ向けYugabyteDB活用シナリオ
by
Masaki Yamakawa
20220331_DSSA_MigrationToYugabyteDB
by
Masaki Yamakawa
20211118 dbts2021 マイクロサービスにおけるApache Geodeの効果的な使い方
by
Masaki Yamakawa
20181031 springfest spring data geode
by
Masaki Yamakawa
Apache geode at-s1p
by
Masaki Yamakawa
20180217 hackertackle geode
by
Masaki Yamakawa
20171125 springfest snappydata
by
Masaki Yamakawa
インメモリーで超高速処理を実現する場合のカギ
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
Download