問題タブ [in-memory-database]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
1229 参照

java - Java アプリケーションでメモリー内のオブジェクトのセットを照会するための手法

Java オブジェクトのセットを返す別のシステム上のインターフェースを呼び出して「粗い検索」を実行するシステムがあります。検索結果を受け取ったら、属性の状態を表す特定の基準に基づいて、結果の Java オブジェクトをさらにフィルタリングできるようにする必要があります (たとえば、最初のオブジェクトから xy > z && ab == c のすべてのオブジェクトを返します)。

毎回オブジェクトのセットをフィルタリングするために使用される基準は、部分的にユーザーが構成可能です。つまり、ユーザーは一致する値と範囲を選択できますが、選択できる属性は固定セットになります。

データ セットには、検索ごとに <= 10,000 オブジェクトが含まれる可能性があります。検索は、おそらく 1 日に 2000 回以下 (約)、アプリケーション ユーザー ベースによって手動で実行されます。結果セット内のすべてのオブジェクトは、構造と関係を記述する Hibernate および JPA アノテーションを持つ既知のドメイン オブジェクト クラスであることは、おそらく言及する価値があります。

可能な解決策

頭のてっぺんから、これを行う3つの方法を考えることができます。

  1. 検索ごとに、最初の結果セット オブジェクトをデータベースに保持し、Hibernate を使用して、より細かい基準を使用してそれらを再クエリします。
  2. メモリ内データベース (hsqldb など) を使用して、最初の結果セットをクエリおよび調整します。
  3. 最初の結果セットを反復処理して目的のレコードを引き出すカスタム コードを記述します。

オプション1

オプション 1 では、ネットワークを介して物理データベース (Oracle 10g) に至るまでの往復が多く、ネットワークとディスクのアクティビティが多くなる可能性があります。また、異なる検索が互いに干渉しないようにするために、各検索の結果を他の結果セットから分離する必要があります。

オプション 2

オプション 2 は、メモリ内でより細かいクエリを実行でき、検索が完了した後にのみ破棄される結果データの永続性を必要としないため、原則として良い考えのようです。直感的には、これもかなりパフォーマンスが高い可能性がありますが、メモリ オーバーヘッドが大きくなる可能性があります (これは、JVM が取得するメモリの量にかなり柔軟に対応できるため、問題ありません)。

オプション 3

オプション 3 は非常にパフォーマンスが高い可能性がありますが、作成するコードには非常に慎重なテストが必要であり、柔軟で堅牢なものを実現するのに時間がかかる可能性があるため、避けたいものです。


3 つのアイデアすべてのプロトタイプを作成する時間がないため、上記の 3 つのオプションに関するコメントと、私が検討していないその他のアイデアを探して、どのアイデアが最も適しているかを判断するのに役立てたいと考えています。私は現在、オプション 2 (メモリ内データベース) に傾倒しているので、メモリ内で POJO をクエリした経験のある人からの連絡もお待ちしています。

状況を十分に詳しく説明できれば幸いですが、シナリオをよりよく理解するためにさらに情報が必要な場合は、遠慮なくお尋ねください。

乾杯、

エド

0 投票する
11 に答える
10613 参照

database - なぜインメモリデータベースが必要になるのでしょうか?

メモリ内で使用できるデータベースがいくつかあると読みましたが、この機能を使用する理由が思い浮かびません。私は常にデータベースを使用してデータとメモリ キャッシュを保持し、高速アクセスを実現しています。

0 投票する
6 に答える
42040 参照

python - Pythonのインメモリデータベース

大規模なデータベースでPythonでいくつかのクエリを実行して、データベースからいくつかの統計を取得しています。他のプログラムがデータベースにアクセスせずにそれらを使用できるように、これらの統計をメモリ内に配置したいと思います。

それらを構造化する方法を考えていたところ、複雑なネストされた辞書を設定しようとした後、適切な表現はSQLテーブルであることに気付きました。ただし、データを永続データベースに戻したくありません。SQL構文を使用したデータのクエリをサポートするSQLデータベースのメモリ内実装はありますか?

0 投票する
3 に答える
463 参照

wcf - メモリからのデータの挿入とクエリのベスト プラクティス

リアルタイムのデータを取得してデータベースに挿入するアプリケーションがあります。1 日 4.5 時間オンラインです。17 のテーブルに 1 秒ごとにデータを挿入します。ユーザーはいつでも、最新の 2 番目のデータと履歴内のいくつかのレコードについて任意のテーブルにクエリを実行できます...

フィードと挿入の処理は、C# コンソール アプリケーションを使用して行われます...

ユーザー要求の処理は、WCF サービスを通じて行われます...

挿入がボトルネックであることがわかりました。ほとんどの時間はそこに費やされます。テーブルと指標を微調整するために多くの時間を費やしましたが、結果は満足のいくものではありませんでした

十分なメモリがあると仮定すると、データベースの代わりにメモリにデータを挿入するベスト プラクティスは何ですか。現在、毎秒更新および挿入されるデータテーブルを使用しています。私たちの同僚は、フィード ハンドラーと WCF ユーザー要求ハンドラーの間のデータベースではなく、別の WCF サービスを提案しました。WCF 中間層は TCP ベースであると想定されており、データを独自のメモリに保持します。フィード ハンドラーは、2 つのプロセス間に中間層を設ける代わりにユーザー リクエストを処理するかもしれないと言うかもしれませんが、フィード ハンドラーがクラッシュした場合でも、現在のレコードをユーザーに提供できるようにするために、物事を分離したいと考えています。

時間は限られていますが、短期間ですべてを記憶に移したいと考えています。2 つのプロセスの途中で WCF を使用するのは悪いことですか? リクエストがオーバーヘッドを追加することはわかっていますが、これら 3 つのプロセス (フィード ハンドラー、メモリ内データベース (WCF)、ユーザー リクエスト ハンドラー (WCF)) はすべて同じマシン上にあり、帯域幅はそれほど多くありません。問題の。

手伝ってください!

0 投票する
1 に答える
279 参照

csv - HSQLDB:接続を閉じた後に作成されたすべてのファイルを削除する簡単な方法は?

CSV ファイルから読み取り、別のファイルに書き込み、HSQLDB を使用して処理するアプリ/ツールがあります。

CSV ファイルを唯一の出力として使用したいのですが、プロセスが終了するとデータベース ファイルは消えます。

  • memストレージを使用しようとしましたが、HSQLDB が CSV ファイルに書き込めません。
  • 接続を閉じる前に DROP SCHEMA も試みましたが、ファイルは削除されません。
  • ファイルを手動で削除するのは好きではありません。これは HSQLDB の実装固有であり、時間の経過とともに変化する可能性があるためです。

CSVファイルのみを残す体系的な方法はありますか? 理想的には、メモリ内ストレージを使用しているときに HSQLDB が CSV ファイルを書き込めるようにするオプションが必要です。

0 投票する
4 に答える
2353 参照

database - インメモリ データベースはどのように耐久性を提供しますか?

より具体的には、耐久性を提供するためにセカンダリ ストレージ (HDD など) を必要としないデータベースはありますか?

注:これは私の以前の質問のフォローアップです

0 投票する
1 に答える
507 参照

sqlite - インメモリ/組込みDBソリューション

私は現在、SQLite のメモリ内オプションを使用していますが、機能している間 (現在は少し遅いですが、バッチ処理などの使用法を最適化する方法をまだ模索しています)、他にオプションがあるかどうかに興味があります。インメモリ DB をサポートし、組み込みソリューションである SQLite の代替。必ずしもスキーマベースの DB が必要なわけではありません (NoSQL を試してみると面白いでしょう)。私は読み取りよりも頻繁に書き込みを行うため (これは Web アプリケーションのバックエンドの一部です)、データの受信フローに追いつくために十分な速さで更新する必要があります。

SQLite はおそらく、クエリ側でいくつかの最適化を行うことでボリュームを処理する以上の能力を備えていると思いますが、代替案について疑問に思っているだけです。

0 投票する
3 に答える
11738 参照

java - Simple and reliable in memory database for fast java integration tests with support for JPA

My integration tests would run much faster if I used in-memory-database instead of PostgreSQL. I use JPA (Hibernate) and I need an in-memory-database that would be easy to switch to using JPA, easy to setup, and reliable. It needs to support JPA and Hibernate (or vice verse if you will) rather extensively since I have no desire to adopt my data access code for tests.

What database is the best choice given requirements above?

0 投票する
5 に答える
19926 参照

python - djangoで、初期化スクリプトからサブコマンド「syncdb」を呼び出すにはどうすればよいですか?

私はpythonとdjangoを初めて使用し、Django Bookをフォローしているときに、データベーステーブルを生成するコマンド「pythonmanage.pysyncdb」について学びました。開発環境では、メモリデータベースでsqliteを使用しているため、サーバーを再起動するたびに自動的に消去されます。では、この「syncdb」コマンドをスクリプト化するにはどうすればよいですか?(「settings.py」ファイル内で実行する必要がありますか?)

明確化

OPはメモリ内データベースを使用しています。このデータベースは、そのデータベースに対して定義されたDjangoモデルを操作するプロセスの開始時に初期化する必要があります。データベースが確実に初期化されるようにするための最良の方法は何ですか(プロセスの開始ごとに1回)。manage.py runserverこれは、Webサーバープロセス(WSGIやmod_pythonなど)を介して、またはWebサーバープロセスを介して、テストを実行したり、サーバーを実行したりするためのものです。

0 投票する
1 に答える
3456 参照

unit-testing - PHPUnit テストに PDO Sqlite インメモリ Db を使用する

最近、Zend Framework アプリケーションをテストするために PHPUnit を xDebug と連携させました。私がZFを使用しているという事実は、この質問に何の違いもありません.完全を期すために言及しただけです.

とにかく、すべて正常に動作しますが、PDO SQLite を使用してメモリ内データベースをセットアップしたいと考えています。私はこれを成功させ、テーブルを作成してデータを挿入しました。ただし、このタスクには時間がかかるように見えました。Export の構文は SQLite のニーズと一致しなかったため、しばらくいじる必要がありました。

また、SQLite は、私のアプリケーションが使用する制約をサポートしていません (そうですか?)。そのため、制約をテストできない場合、プロセス全体が時間の無駄に思えます。

SQLite を使用することは、私の問題に対する適切な解決策ですか? それを使用するより良い方法や、単体テストに対する他の DB ソリューションはありますか?