インメモリ データベースの使用を検討する必要があるのはどのような場合ですか?また、注意すべき問題は何ですか?

StackOverflow https://stackoverflow.com/questions/1593692

質問

今まさにそうだと思ってた データベース全体をキャッシュするのに十分な RAM をデータベース サーバーに搭載するのが一般的です なぜその専門家がいるのか メモリデータベース (例えば タイムズテン, 、こちらも参照 ウィキペディアのページ)数年前に大流行していましたが、今はもう使われていないのでしょうか?

時間が経つにつれて、ディスクベースのデータベースの使用は減少しているようです。たとえば、ほとんどのアプリケーションは、従来の合理的なデータベースに基づいて構築されています。多くのサーバーで RAM が無料に近づいているため、私はその逆を予想していました。

stack-overflow-architectureを読んだところ、そのページに次のように書かれているので、これを質問しています。

Stack Overflowのデータベースはほぼ完全にRAMにあり、結合が依然として正確に高すぎるため、これは重要です。

しかし、通常の btree の代わりに「ポインター」と「コレクション」が使用されていれば、これは問題にはならないと思います。Btree は、ディスク アクセス速度のラウンド制限を取得するのに非常に賢明です。たとえば、CPU 使用率と引き換えにディスク使用率を削減します。しかし、今ではマッチするラムがたくさんあります。

ただし、独自のデータベースを作成する必要があるため、

  • ロック
  • デッドロック検出
  • トランザクションログ
  • 回復

とても大変です。

@S.Lott、私たちは皆、インデックスの選択、結合の回避、データベースのパフォーマンスの問題の調査に非常に長い時間を費やしていることを考えると。もっと良い方法があるはずです。数年前、「メモリ内データベース」の方が良い方法だと言われました。したがって、これらを使用する前に、なぜ他の人がそれらをもっと使用しないのかを知りたいと思います。

(TimesTen は価格が高いため、私自身は使用するつもりはありません ($41,500.00 / プロセッサー)そして、私は Oracle の営業担当者と話すのが好きではありません。むしろコードを書くことに時間を費やしています。)

以下も参照してください。

アップデート:

私はこの質問をしました 長さ 昔は、最近では Microsoft SQL Server に「インメモリOLTP" これは、SQL Server エンジンに統合されたメモリ最適化データベース エンジンです。安くはないですが、ありそうです とても早い 一部のワークロードの場合。

役に立ちましたか?

解決

ほとんどは、おそらくいない古典的なデータベースの完全な代替として使用できるメモリデータベースの製品が成熟されます。

リレーショナルデータベースは、非常に古い概念です。多くのアプローチがあったが、前方に移動し、例えば、新しい技術を開発します。オブジェクト指向データベース、リレーショナルデータベースは、本当に自分の考え方を変えませんでした。データベースはさらに長く、最後の10か15年後かにはあまり変化しなかったので、物事は、あまりにも速く変化することを期待しないでください。

私が思うに、技術の開発が早く1が信じるようではありません。それは成熟し、確立する新しい概念のために数十年を要します。最初の成熟度がはるかに重要であるデータベース技術、内のすべての他のその後何ます。

は10年、20年では、データベースは、彼らが今日あるともうおそらく同じではありません。インメモリ・データベースは、将来のであれば - 誰もが、今日これを伝えることはできません - 彼らはただ開発するためにいくつかのより多くの時間を必要とする

他のヒント

「私は、メモリデータベースとどのように使用することを検討すべきであるときのために外を見るために問題がある?」

誰も本当に質問に答えていません私はそれをやってみるよそう。

次の場合、インメモリデータベースを考慮する必要があります。   1.ターゲットシステムが管理するデータ、ない永続的なメディアを持っています   2.性能要件を単純永続データベースで満たすことができない

#1の場合は、お使いのセットトップボックス(STB)にTVガイド考えます。ローエンドのSTB(すなわちないDVR能力を有するもの)は永続的なストレージを持たない、および永続的な記憶装置を必要としません。しかし、400チャンネル、14日TVガイド用のデータベースは、非自明です。データを高速でトランスポンダカルーセルから到着し、それはそれをキャプチャしたり、カルーセルが再び来るまで待つ "の場合ですので、性能要件は、あまりにも、ここにあります。しかし、永続化のための必要はありません。私たちは、このすべてを見てきました。あなたの家で力を失ったときにそれが戻っTVガイドに来ると言うとき、それはトランスポンダまたはケーブルヘッドエンドから自分自身をプロビジョニングているため、「まもなく利用できるようになります」。ネットワークルータは、同じ特性を共有します。永続ストレージ、高速である必要があり、データベース(ルーティングテーブルを再作成するために、ここではネットワーク上のピアルータ)外部ソースからプロビジョニングすることができない

#2の無限の例があります。軍事システムにターゲッティングリアルタイムは、高頻度取引システム、およびより

質問の後半部分については、「気をつけるべき問題」:多くがあります。

あなたが唯一のインメモリデータベースが提供できるという性能が必要な場合は必ず真のインメモリデータベースを評価していることを確認します。永続的なデータベースをキャッシュする同じではありません。 RAMドライブに永続的なデータベースを投げることは同じではありません。 (あなたはは/ dev / nullにログインした場合でも)、本質的に(TimesTenのような)トランザクションログが同じでないないこと、インメモリデータベースを使用します。

あなたは単にキャッシュ(例えばmemcacheの)データベースシステムを評価し、していないことを確認します。データベースシステムは、ACID特性との取引のためのサポートを持つ複数のインデックス・オプション、同時アクセスをサポートし、より多くなります。

ACIDについて

:インメモリ・データベース・システムは「D」(耐久性)を欠くません。それは単に文脈で注意しなければなりません。永続的なデータベースのトランザクションは、それが上の保存されているメディアは耐久性があるとして、耐久性があります。同じことは、インメモリ・データベースについても同様です。あなたは、耐久性を気にしている場合どちらの場合も、あなたはより良いバックアップを持っています。

傾向としては、積極的にキャッシュし、データベースを使用してキャッシュにデータを取り込むことが多いようです。データベースがどこに存在するかに関係なく、結合は依然として高価であるため、結合を一度実行して結果を次のような形式でキャッシュすることが優先されるようです。 Memcached または 速度.

インメモリ データベースはまだ存在しており、使用されていますが、それは使用するコンテキストによって異なります。 SQLite たとえば、データ レイヤーをテストするときに、インメモリ データベースとしてよく使用されます。

最も重要な理由は、貨物の文化、およびITが非常に低い知識レベルです。ほとんどのアプリケーションでは、永続化ソリューションを使用するものは何でもよく、十分に機能し、コンピュータはまだ毎年速くなっているように、十分ではない人は、痛みを感じると、問題を特定することができる。

MicrosoftとOracleは、彼らがより良いアプローチを考え出すことが(政治的に)可能にするために彼らのデータベース製品にあまりお金を稼ぎます。

リレーショナルデータベースを使用しての開発コストがなされていない透明ので、管理が問題おろか、解決策があることがわかりません。

インメモリ データベースには通常、 D (耐久性) (原子性、一貫性、分離性、耐久性) はまさにその性質によるものです。これは「ハイブリッド」アプローチである程度は克服できますが、ある時点で何か (データ自体またはトランザクション ログ) を永続化する必要があります。 どこかで 耐久性の面を提供します。これにより、通常、パフォーマンスが低下したり、その他の望ましくないプロパティがインメモリ データベース ソリューションに導入されたりする可能性があります。

対照的に、今日のほとんどの RDBMS は ACID を完全に補完しており、何十年にもわたって開発が行われています。これにより、特に現代の RDBMS システムで見られた長年の改善と最適化により、非常にパフォーマンスの高いディスク ベースのデータベース システムが実現しました。 Bツリー 例は多数のうちの 1 つにすぎません)。

もう 1 つの要因は、アプリケーション開発者として、次のようなメカニズムによってデータベースの負荷を軽減できることです。 キャッシング, 、それによってさらに多くを絞ります 認識された アプリケーションのデータ層からのパフォーマンス。実際、キャッシング自体は近年大幅な発展を遂げており、今日では分散キャッシングが一般的になっています (キャッシュの数を見てください) memcached のユーザー, 、 例えば)。

皮肉なことに、現代のキャッシュ システムは、さまざまな意味で、真のインメモリ データベース システムに似たものにゆっくりと変貌しつつあります。インメモリ データベースは、オブジェクト指向データベースと同様、まさに「新参者」であるため、これらすべてが時間の経過とともにどのようになるのかを見るのは興味深いでしょう。Oracle は現在 TimesTen を買収しており、 このウィキペディアの記事, Microsoftは、近いうちにインメモリデータベース市場への参入を検討している。これは、インメモリ データベース システムを真剣に受け止めている、従来の RDBMS 分野における現代の「大手企業」2 社です。

これもオプションである: http://www.memsql.com/する

私は個人的にそれを使用していないが、ドロップインのMySQLの代替のメモリ内の線に沿っことになってます。

主にモバイル機器用に設計された同じ効率で動作する

SQLの各種携帯バージョン、

SQLiteの

SQL ServerのCompact Editionの

これらは単なる大きなプレーヤーである他のオプションがあるかもしれないが、大きな選手が...それのリリースで最低限の要件を処理します。)

変動やPOWERCUTはあなたが損失全体の束をしてもよい生じた場合は、

とメモリデータベースでは、あなたが継続的にデータをバックアップしています。他のように二次記憶装置(HDD)に、そのように処理されることと損失の可能性が10%メモリDBと比較されます。

私は、この5月の助けを願っています:)

データベースのための最も一般的なユースケースは、ほとんどのインメモリ・データベースは適さない持続性、です。インメモリ・データベースを使用するための一つの人気の理由は、テストの目的です。しかし、これはあなたが、インメモリと、何か他のものとの両方を設定することができますいずれかのデータベースを使用する必要があります。

この分野での

人気の選択肢は、Java開発者のための.NET開発者のためのRavenDBとOrientDBのようです。構成に応じて缶のインメモリ・データベースとして機能し、「他の何か」の両方のため、ご使用の構成(.NET、Mavenのか、JavaでのAntの設定ではapp.config)に応じて、どちらか一方を使用することができるようにします。

データ処理のニーズが複雑になり、製品の生態系の変化に対応これらの新しいニーズにディスクに基づくRDBMSでは、メモリキャッシュ-インメモリデータベースを用いて満足します。だか自分が必要-

伝統的なRDBMS: MySQLクラスターにあるのは、簡単かつ十分に維持できるようにな信頼性の酸コンプライア

メモリ配布cahce: お申込が必要とな高速読み書きを気にせず過程の一貫性や複雑な取引です。

メモリRDBMS:

  1. (速度):おのアプリケーションのニーズにデータがお客様のより高速ディスク上のデータベースにできます。
  2. (複雑性):必要な複雑な取引を読み込みおよび書き込みますと参加および集合体のように利用力してください。
  3. (拡張性):必要な規模データベースを水平になります。
  4. (保守性):必要なデータベースの供用性が高く、複製、負荷分散や災害復興を追加せずに維持しました。
  5. (とを条件と):お客様のデータは適合メモリ(通常はテラバイト).
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top