分散KVS上でのトランザクションについて@stakezakiさんとお話
@stakezaki トランザクション可能でスケーラビリティのある物というと、http://t.co/pBY65urr とか http://t.co/H7u75mWU とか https://t.co/3JmJl1z5 とか知ってます。
2012-07-14 02:28:49@kumagi http://t.co/mnjw9Y00では http://t.co/EA0ULbDK を見るとMySQLのMemoryやCPU、Connectionsを調整できスケールアップできるのですが、何も考えずにやると(シャーディングしないと)いつかは破綻します。
2012-07-14 09:05:58@kumagi DBMSがボトルネックなのでシャーディング/クラスタリングするはずです。であればRDBにする必要はなくKVSだとORM省略でゼロコピーできます。トランザクションが使えて単にデータを格納することができればそれでいいはずです。http://t.co/p7N6BTSm
2012-07-14 09:13:52@kumagi DBMSでは並列度を高めるために基本コネクションを使い、それが事実上無限に取れないのでボトルネックになると理解しています。メモリやCPUの高速化、アルゴリズムの改善などで高速化は可能でも、所詮高速化できた分しかスケールしない。結局、シャーディングするしかないのでは
2012-07-14 14:47:01@kumagi http://t.co/yzhiZGJz に書いたように本当はドメインロジックがAP側に入るはずですが、総じてDBaaSはこのことがあまり考慮されていない。datomicについては、読み込みのキャッシュは効くようですが書き込みがボトルネックになるようです。
2012-07-14 09:22:24@kumagi DBを複数に分けられるかがスケールアウトのポイントになると思いますが、datomicではDBが1つなのでやはり限界がでてきます。
2012-07-14 09:25:57@kumagi DBが一つといいましたが正しくは「Transactorは単一ノードなのでライトが一定量を超えるとボトルネックになり得ます。Richのコメントによれば、この制限は他の様々な利点とのトレードオフ」とのことです。http://t.co/5YGFKKEh
2012-07-14 14:39:45@kumagi datomicは読み出しが完全Local だから凄いとありましたが、それはそう思います。reflexworks はread/writeともにLocalです。NWは介しません。
2012-07-14 21:39:25@kumagi Google Cloud SQLは、http://t.co/joz0SevQ にも書きましたが、Datastore(KVS)と比較して際のパフォーマンス、あとはRDBの必要性ですね。私はオンライントランザクションだけ考えればRDBである必要はないという立場です。
2012-07-14 09:32:49トランザクションだからスケールしない、という考えには全力で異を唱える。shardingなんかしなくてもスケールアウトは可能だ。問題は性能が出るかどうか。
2012-07-14 12:28:46@stakezaki スケールアウト可能なデータベースで言うと http://t.co/WO5CIjAr も有ります。 念の為ですが、僕はRDBに思い入れがあるわけでもORマッパを支持するわけでもないですが、トランザクションがスケールしないとは思わないという立場です。
2012-07-14 14:00:33@kumagi 了解です。IRSは、http://t.co/Fu41qX9F によると、トランザクションサーバ内でマイクロシャーディングをするとあります。結局、シャーディングを使っていてhttp://t.co/M5Qp9y15とそっくりです。SQLではありますが。。
2012-07-14 14:42:37@kumagi よくわかりませんでした。クラスタを跨ぐJOINやトランザクションで、なぜ遅くならないかも不明です。ですが、シャーディングによるクラスタ分割は基本同類とみなしています。
2012-07-14 21:20:31@kumagi 実はKVSでは無限のトランザクションに対して処理可能なものもあります。GAEのEntityGroupがそうです。atomicな行レベルを応用して実現しています。シャーディングはありません。http://t.co/GUFLowND
2012-07-14 15:07:11@kumagi 私はGAEのEntityGroupのような仕組みを実装しているRDBを知りません。他の技術もあるのかもしれませんが、それらを含めても、恐らくできていないのだろうと思っています。reflexworksはKVSでありながらシャーディングで残念なのですが将来実現したい。
2012-07-14 15:13:00@stakezaki http://t.co/CNHd57vn 無限の意味する所がわかりませんが、僕の修論はPaxosを使わずに分散トランザクションを実行できています。
2012-07-14 20:23:04@kumagi それはすごいですね。無限の意味はトランザクション量とデータ量のことです。無限な量は現実には存在しませんが、どんなに増えてもノード追加などでリニアにスケールできるかどうかがポイントだと思います。
2012-07-14 21:16:53@kumagi RDBではEGトランザクション考えるもなく、データ量に比例して遅くなる問題を解決しなければなりません。EGの実装はそれができないと意味がありませんね。
2012-07-14 15:37:44