【13-D-1】 ERP5に見るストレージ技術

24
奥地 秀則 株式会社 Nexedi 代表取締役社長 13-D-1 ERP5 ERP5 に見るストレージ技術 に見るストレージ技術

Transcript of 【13-D-1】 ERP5に見るストレージ技術

奥地 秀則株式会社 Nexedi代表取締役社長

13-D-1

ERP5ERP5 に見るストレージ技術に見るストレージ技術

自己紹介自己紹介

学生時代は数学とか生物学とか学生時代は数学とか生物学とか 趣味で長年フリーソフトウェア開発趣味で長年フリーソフトウェア開発

GRUBGRUB とかが有名らしいとかが有名らしい 去年「日本去年「日本 OSSOSS 貢献者賞」とか貰っちゃいました貢献者賞」とか貰っちゃいました

フランスフランス Nexedi SANexedi SA でで CTOCTO を五年ほどを五年ほど ERP5ERP5 の開発とかの開発とか 雑用とか雑用とか

現在は株式会社現在は株式会社 NexediNexedi で社長業で社長業

今日言いたいこと今日言いたいこと

歴史から学ぶべき歴史から学ぶべき 古いことは悪いことじゃない古いことは悪いことじゃない 埋もれた技術が多すぎる埋もれた技術が多すぎる 新しい方が金になるは本当かも、でも(略新しい方が金になるは本当かも、でも(略

リレーショナルデータベースは万能じゃないリレーショナルデータベースは万能じゃない 一つのもので全部やることに無理がある一つのもので全部やることに無理がある 適材適所適材適所 データ構造剥き出しなので、低レベル向きデータ構造剥き出しなので、低レベル向き

ERP5ERP5 って何?って何?

NexediNexedi が中心となって開発しているオープが中心となって開発しているオープンソースンソース ERPERP

小規模から大規模まであちこちで利用中小規模から大規模まであちこちで利用中 中央銀行の事例だと、中央銀行の事例だと、 11 時間時間 1010 万トランザクシ万トランザクシ

ョンを処理ョンを処理

言語はほぼ言語はほぼ PythonPython アプリケーションサーバはアプリケーションサーバは ZopeZope RDBMSRDBMS はは MySQLMySQL がデフォルトがデフォルト

単純にパフォーマンス上の事情単純にパフォーマンス上の事情

ERPERP って何なの?って何なの?

Enterprise Resource PlanningEnterprise Resource Planning の略の略 要するに、業務の統合管理システム要するに、業務の統合管理システム 生産、購買、請求、会計、人事、生産、購買、請求、会計、人事、 EE コマース等々コマース等々

データ量が多いデータ量が多い データ構造が複雑データ構造が複雑

異なる業務データが絡み合うから異なる業務データが絡み合うから

ミッションクリティカルミッションクリティカル 止まるとやばい、くさるとやばい止まるとやばい、くさるとやばい 整合性、安全性、超重要整合性、安全性、超重要

ERPERP の技術的難しさの技術的難しさ

相反するシステム要求相反するシステム要求 複雑な大量データを高速に処理しないと複雑な大量データを高速に処理しないと なのに真面目なトランザクション処理必須なのに真面目なトランザクション処理必須

止まらない機能変更止まらない機能変更 ビジネスは日々変わるビジネスは日々変わる 止まるとまずいのに、変えられないのもまずい止まるとまずいのに、変えられないのもまずい

つまりつまり ...... スケールして変更が容易で安全で高速なシステスケールして変更が容易で安全で高速なシステ

ムを作らないといけないムを作らないといけない

RDBMSRDBMS でで OKOK ??

RDBMSRDBMS原理主義者の主張原理主義者の主張 RDBMSRDBMS はスケールするはスケールする RDBMSRDBMS は数学的に完璧だから最高は数学的に完璧だから最高 RDBMSRDBMS に機能を足せば何でもできるに機能を足せば何でもできる

○○ってゆーか、 にあれもこれもない方がダメ○○ってゆーか、 にあれもこれもない方がダメ

オブジェクト指向なんて、オブジェクト指向なんて、 ORMORM で余裕で余裕 でも、それって本当にそうなの?でも、それって本当にそうなの?

そもそもそもそも RDBMSRDBMS って何?って何?

数学の集合論が理論的根拠数学の集合論が理論的根拠 データを関係性によって結び付けデータを関係性によって結び付け 生のデータ構造を表に分解生のデータ構造を表に分解 大手ベンダのマーケティングで大手ベンダのマーケティングで 8080 年代から年代から爆発的に普及爆発的に普及

大学のデータベース論で教えられるもの大学のデータベース論で教えられるもの

データベースの過去データベースの過去

昔はリレーショナルだけじゃなかった昔はリレーショナルだけじゃなかった 例えば、ネットワーク・データベース例えば、ネットワーク・データベース

グラフのエッジを保存するので、ジョイン不要グラフのエッジを保存するので、ジョイン不要

例えば、オブジェクト・データベース例えば、オブジェクト・データベース オブジェクトの扱いはオブジェクト自身が知っていオブジェクトの扱いはオブジェクト自身が知ってい

るる メソッドをデータベース内部に持つタイプと、外部メソッドをデータベース内部に持つタイプと、外部

に出すタイプがありに出すタイプがあり 最近は最近は ORMORM によって似非によって似非 ODBMSODBMS が流行が流行

RDBMSRDBMS の何がイケてない?の何がイケてない?

スキーマが露骨に現れるので、データ構造のスキーマが露骨に現れるので、データ構造の変更に弱い変更に弱い ALTER TABLEALTER TABLE はテーブル・ロックかかるはテーブル・ロックかかる

ちょっとでも違う構造のオブジェクトを入れようちょっとでも違う構造のオブジェクトを入れようとすると、とすると、 テーブル増やしまくってパフォーマンス劣化か、テーブル増やしまくってパフォーマンス劣化か、 補助テーブル増やしてジョイン激重か、補助テーブル増やしてジョイン激重か、 要るとは限らないカラムをがんがん増殖させて要るとは限らないカラムをがんがん増殖させて

(略(略 私はこれを「じょじょにせきか」と呼ぶ私はこれを「じょじょにせきか」と呼ぶ

RDBMSRDBMS は速い?は速い?

インデックス増やせば、インデックス増やせば、 INSERT / UPDATEINSERT / UPDATEはどんどん重くなるはどんどん重くなる

Next-Key LockingNext-Key Locking とか、案外余計なロックとか、案外余計なロックがかかるがかかる デッドロックの最大要因の一つデッドロックの最大要因の一つ

クライアント側でデータ更新を検知しにくいのクライアント側でデータ更新を検知しにくいので、クライアント側でキャッシュしにくいで、クライアント側でキャッシュしにくい

大体そんなに速かったら大体そんなに速かったらmemcachedmemcached なんなんて要らないて要らない

ORMORM ってどうよ?ってどうよ?

所詮は単なるマッピング所詮は単なるマッピング RDBMSRDBMS の欠点をそのままオブジェクト指向の世の欠点をそのままオブジェクト指向の世界に持ち込んでいる界に持ち込んでいる

オブジェクトの生データをそのまま検索に使いオブジェクトの生データをそのまま検索に使いたいとは限らないたいとは限らない 結局余分にテーブルを作ることになり、隠蔽でき結局余分にテーブルを作ることになり、隠蔽でき

ないない

インデックス更新のせいで書き込みが遅いインデックス更新のせいで書き込みが遅い 検索結果に即時に反映されないでいいことも多検索結果に即時に反映されないでいいことも多

いのにいのに

ERP5ERP5 はこうしているはこうしている

生データは、生データは、 ZODBZODBへへ 検索用データは、検索用データは、 Z SQL CatalogZ SQL Catalog でで MySQLMySQLへへ

インデックス作成は、インデックス作成は、 CMF ActivityCMF Activity で遅延&で遅延&分散分散

ZODBZODB って何?って何?

ZopeZope の標準データベースの標準データベース オブジェクト指向オブジェクト指向

データはデータは picklepickle してそのまま突っ込まれるしてそのまま突っ込まれる 内部データ構造は気にしない内部データ構造は気にしない OIDOID でオブジェクトを同定でオブジェクトを同定

ストレージは交換可能ストレージは交換可能 大抵の人はログ型の大抵の人はログ型の FileStorageFileStorage か分散対応のか分散対応の

ZEOZEO

楽観的トランザクション楽観的トランザクション

楽観的トランザクション?楽観的トランザクション?

悲観的トランザクションの逆悲観的トランザクションの逆 失われつつあるテクノロジーの一つ失われつつあるテクノロジーの一つ 悲観的トランザクションは、悲観的トランザクションは、

衝突する前にロックする衝突する前にロックする 起きるかもしれないってだけで回避するので悲観的起きるかもしれないってだけで回避するので悲観的

楽観的トランザクションは、楽観的トランザクションは、 とりあえずやってみて、衝突したらロールバックしてリとりあえずやってみて、衝突したらロールバックしてリ

トライトライ 起きないだろうと淡い期待を抱くので楽観的起きないだろうと淡い期待を抱くので楽観的

ZODBZODB の長所の長所

スキーマの変更に強いスキーマの変更に強い オブジェクトを復元状態でキャッシュできるオブジェクトを復元状態でキャッシュできる PersistentPersistent クラスさえ継承すれば透過的クラスさえ継承すれば透過的

変更したオブジェクトは自動的にコミットされる変更したオブジェクトは自動的にコミットされる ほとんどの場合、呪文は唱えなくていいほとんどの場合、呪文は唱えなくていい

衝突率が低く抑えられれば激速衝突率が低く抑えられれば激速 ときどきデータ構造に工夫が必要ときどきデータ構造に工夫が必要 衝突を解決するハンドラーを仕込めるケースも衝突を解決するハンドラーを仕込めるケースも

ZODBZODB の短所の短所

衝突率が高いと激遅衝突率が高いと激遅 トランザクションのコストが大きいと、衝突がトランザクションのコストが大きいと、衝突が

発生したとき、ダメージ大きい発生したとき、ダメージ大きい 検索には全く不向き検索には全く不向き

データベースが内容を知らないので、関係ないオデータベースが内容を知らないので、関係ないオブジェクトも復元してみて全検索するしかないブジェクトも復元してみて全検索するしかない

RDBMSRDBMS厨にウケが非常に悪い厨にウケが非常に悪い 違うものは全部嫌いらしい違うものは全部嫌いらしい

Z SQL CatalogZ SQL Catalog とはとは

NexediNexedi で作ったオブジェクト・インデクシングで作ったオブジェクト・インデクシング・エンジン・エンジン ZODBZODB 中のオブジェクトを他のデータベースへ好中のオブジェクトを他のデータベースへ好

きなように突っ込んだり検索したりきなように突っ込んだり検索したり 普通は普通は RDBMSRDBMS が対象が対象 実は対象は何でもいい(実は対象は何でもいい( LDAPLDAP とか)とか)

ZopeZope添付の添付の Z CatalogZ Catalog とほぼとほぼ APIAPI 互換互換 別のデータベースを併用することで、別のデータベースを併用することで、 ZODBZODB

の短所を補うの短所を補う

Z SQL CatalogZ SQL Catalog の長所の長所

何をどこにインデックスするかは、すべてあな何をどこにインデックスするかは、すべてあなたの自由たの自由 メソッドの結果を突っ込めるので、データ構造を晒メソッドの結果を突っ込めるので、データ構造を晒

す必要なしす必要なし 検索に要らないデータは入れなくていいので、パ検索に要らないデータは入れなくていいので、パ

フォーマンス良好フォーマンス良好

同時に複数のデータベースを使い分け可能同時に複数のデータベースを使い分け可能 動作中にデータベースを作り直す機能あり動作中にデータベースを作り直す機能あり

スキーマ変更時にも無停止を実現スキーマ変更時にも無停止を実現

Z SQL CatalogZ SQL Catalog の短所の短所

自動的にテーブルの構造を考えたりはしてく自動的にテーブルの構造を考えたりはしてくれないれない 私は余計なお世話だと思ってますが私は余計なお世話だと思ってますが ......

データ・モデルをちゃんと考えておかないと、データ・モデルをちゃんと考えておかないと、結局結局 ORMORM の二の舞になるの二の舞になる テーブルやカラムを増やしすぎないように、統一テーブルやカラムを増やしすぎないように、統一

的なモデルを考えておくべき的なモデルを考えておくべき ERP5ERP5 の場合、統合ビジネスモデルで基本要素をの場合、統合ビジネスモデルで基本要素を

55 つに限定しているつに限定している

CMF Activ ityCMF Activ ity とはとは

Active ObjectActive Object のフレームワークのフレームワーク Active ObjectActive Object は失われつつあるテクノロジーのは失われつつあるテクノロジーの

一つ一つ 19801980 年に年に SmalltalkSmalltalkの研究者が発案の研究者が発案 POSAPOSA にデザイン・パターンとして記述されているにデザイン・パターンとして記述されている

実行しようとしている状態をそのまま保存し、実行しようとしている状態をそのまま保存し、後で復元して、本当に実行後で復元して、本当に実行

スケジューリング、結果レポート機能、分散処スケジューリング、結果レポート機能、分散処理など理など

つまり、こういうことつまり、こういうこと

ZODBZODB MySQLMySQL

ERP5ERP5

CMF ActivityCMF Activity Z SQL CatalogZ SQL Catalog

生オブジェクト生オブジェクト 検索検索

遅延遅延 インデックスインデックス

まとめまとめ

RDBMSRDBMS を何にでも使おうとするべきじゃないを何にでも使おうとするべきじゃない英語版英語版WikipediaWikipedia の「の「 Object-relational Object-relational

impedance mismatchimpedance mismatch 」とか参照」とか参照 過去の研究にもいいものはいっぱいある過去の研究にもいいものはいっぱいある

流行っているものがいいとは限らない流行っているものがいいとは限らない

ちゃんと考えなきゃいいものは作れないちゃんと考えなきゃいいものは作れない ERP5ERP5 でいいからといって、あなたのところでもいでいいからといって、あなたのところでもい

いとは限らないので、自分で考えましょういとは限らないので、自分で考えましょう

広告広告

ERP5 : http://www.erp5.org/ERP5 : http://www.erp5.org/ Nexedi: http://www.nexedi.co.jp/Nexedi: http://www.nexedi.co.jp/