-1


1

(本当に)高性能のインメモリデータベース/ストレージメカニズムを実装するためのアイデアが必要です。 各オブジェクトが約5秒ごとに更新されて、20,000個のオブジェクトを格納する範囲。 * FOSSソリューションをお願いします*。

私の最良の選択は何ですか? あなたの経験は何ですか?

私は主にJavaで作業していますが、データストアソリューションがJava中心である必要がないように、優れたパフォーマンスを得るためにデータストアが必要です。

私はまたこれらのオブジェクトをクエリできるようにする必要があり、私はプログラムの起動時にすべてのオブジェクトを復元できるようにする必要があります。

9 Answer


3


http://sqlite.org/ [SQLite]は、インメモリデータベースをサポートするオープンソースの自己完結型データベースです( `:memory:`に接続するだけです)。 多くの一般的なプログラミング言語用のバインディングがあります。 これは伝統的なSQLベースのリレーショナルデータベースですが、あなたは別のサーバを走らせることはありません - あなたのプログラムのライブラリとしてそれを使うだけです。 とても速いです。 それが十分速いかどうか、私は知りませんが、それは実験に値するかもしれません。

http://www.zentus.com/sqlitejdbc/ [Javaドライバ]。


1


5秒ごとに20Kのオブジェクトを更新しますか、それとも5秒ごとに20Kのオブジェクトの1つを更新しますか。

どんな種類の物? なぜ従来のRDBMSでは不十分なのでしょうか。


1


http://hsqldb.org/[HSQLDB]およびhttp://www.prevayler.org/[Prevayler]を調べてください。 Prevaylerは、従来のRDBMSからのパラダイムシフトです - 私がいくつかのプロジェクトで使用したパラダイム(つまり、特にPrevaylerではありません)。


1


あなたがそれを問い合わせる必要がある方法に正確に依存するが、あなたはmemcachedを調べましたか?

http://www.danga.com/memcached/[]http://www.danga.com/memcached/

他のオプションには、 MySQL MEMORY Tables、http://php.net/manual/en/functionなどがあります。 PHPを使用している場合はapc-add.php [APC Cache]。

プロジェクト/要件に関するもう少し詳細が役に立つでしょう。


1


インメモリストレージ?

1)すべての構造体がインデックス付けされる単純なCの 'malloc’配列。

2)berkeleyDB:http://www.oracle.com/technology/products/berkeley-db/index.html。 独自のインデックス(セカンダリデータベース)を構築し、評価するSQL式がないため、高速です。


1


ここにリストされている製品のいくつかを見てください。http://en.wikipedia.org/wiki/In-memory_database


0


どの程度の耐久性が必要ですか? 1秒ごとにデータをディスクに書き戻す場合、トランザクション数の観点から、5秒ごとに20,000回の更新がおそらくほとんどのIOハードウェアにとって困難になります。

あなたがいくつかのアップデートを失う余裕があるならば、あなたはあなたのデータベースとOSがそれをすることを支持するならかなり安いハードウェアで何の問題もなく全く問題なくディスクにそれをフラッシュすることができます。

それが本当にインメモリデータベースで、ディスクに頻繁にフラッシュしたくない場合は、それはかなり簡単に思えます。 H2はかなり良いと聞いたことがありますが、SQLiteも同様に機能する可能性があります。 適切に調整されたMySQLインスタンスもそれを実行できます(ただし、もっと複雑になるかもしれません)。


0


Oracle TimesTenインメモリデータベース。 参照してください:http://www.informationweek.com/whitepaper/Business-Intelligence/Datamarts-JP-Warehouses/oracle-timesten-in-memory-databas-wp1228511232361


0


Chronicle Mapは、純粋なJavaのKey-Valueストアです。

  • それは本当に高いパフォーマンスを持ち、持続します http://vanillajava.blogspot.com/2014/10/chronicle-map-and-yahoo-cloud-service.html [単一スレッドから100万回/秒]。 高速なデータベースをJavaで書くことができないというのは神話です。

  • シリアル化可能なJavaオブジェクトをシームレスに保存およびロードし、 シンプルな `Map`インターフェース

  • LGPLv3

多くの「テーブル」を持っていないので、本格的なSQLデータベースはやり過ぎる解決策になるかもしれません。 必要に応じて、クロニクルマップhttps://github.com/OpenHFT/Chronicle-Map#multi-key-queries [メカニズムを提供]を使用して、このような更新を同時に分離することができます。