SSDはデータベースの有用性を低下させますか


28

今日私はロバート・マーティンについて聞いただけで、彼はソフトウェアの世界で有名な人物のようですので、タイトルがクリックの餌のように見えたり、口に言葉を入れているように見えるわけではありませんが、これは単に限られた経験と理解で彼から聞いたことをどのように解釈したか。

本日(ソフトウェアアーキテクチャ)、ロバートC.マーティンの講演でビデオを見ていました。ビデオの後半では、データベースのトピックが主な焦点でした。

彼の発言を理解したところ、SSDはデータベースの有用性を(かなり)低下させると言っていたようです。

この解釈に至った経緯を説明するには:

彼は、HDD /スピニングディスクでは、データの取得が遅い方法について説明しました。しかし、最近ではSSDを使用している、と彼は指摘しました。「RAM is coming」で始まり、RAMディスクについて言及し続けますが、RAMディスクと呼ぶことはできないと言うので、RAMと言うことに頼ります。したがって、RAMでは、すべてのバイトが取得するのに同じ時間がかかるため、インデックスは必要ありません。(この段落は私によって言い換えられています

だから、彼はDBの代わりにRAMを(コンピューターのメモリのように)提案することは(それは私が彼の声明を解釈したものだから)意味をなさない。オンデマンドでディスクファイルからプルしない限り)

だから、私はRAMで考えることに頼った、彼はSSDを意味します。したがって、その場合、彼はSSDがデータベースの有用性を低下させると言っています。彼は「私がオラクルだったら怖いだろう。私が存在する理由の根底にあるのは蒸発する」とさえ言う。

SSDについての私のわずかな理解から、O(n)シーク時間であるHDDとは異なり(私は思う)、SSDは近くO(1)、またはほぼランダムです。だから、彼の提案は私にとって興味深いものでした。数年前に私が初めてデータベースを紹介されたとき、教授が通常のファイルシステムに対する利点を説明していたとき、私はデータベースの主な役割は本質的に非常にインデックス付けされたファイルシステムであると結論付けました(最適化、キャッシュ、同時アクセス、など)、したがって、SSDでインデックスが必要ない場合、この種のデータベースの有用性は低下します。

それにもかかわらず、私が初心者であることを前にすると、純粋なファイルシステムではなくDBをアプリケーションの主要なポイントとして誰もが使用し、彼が単純化しすぎていると感じたため、それらがあまり有用ではなくなると信じることは難しいデータベースの役割。

:彼が何か違うことを言わないように最後まで見ました。

参考までに、4222はデータベーストピック全体が表示されるとき、4352は 「なぜデータベースがあるのか​​」で始まるときです。

この答えは、SSDがDBを大幅に高速化すると言っています。 この質問は、最適化がどのように変更されるかについて尋ねます。

TL; DR私の質問は、サーバ市場で広くSSDの使用の出現は(それは今後のだか、すでに起こっているかどうか)のデータベースの有用性を減らすのですか?

プレゼンターが伝えようとしていたのは、SSDを使用すると、データをディスクに保存でき、SSDのように古いHDDのようにデータを取得するのに時間がかかることを心配する必要がないということでしたO(1)(おもう)。そのため、それが真実である場合、それはそれが持っていた利点の1つを仮定的に失うでしょう:インデックス付け、より速いシーク時間のためのインデックスを持つ利点がなくなったので。

回答:


59

データベースには、SSDを使用するときに微調整する必要があるものがいくつかあります。たとえば、PostgreSQLの場合、、effective_io_concurrencyおよびを調整できますrandom_page_cost。ただし、高速な読み取りと高速なランダムアクセスは、データベースの機能ではありません。それは保証します

彼はインデックスについて間違っています。テーブル全体をRAMに読み込むことができる場合でも、インデックスは有用です。信じられない?思考実験をしましょう、

  • 1つのインデックス付き列を持つテーブルがあるとします。

    CREATE TABLE foobar ( id text PRIMARY KEY );
  • そのテーブルに5億行あると想像してください。

  • 5億行すべてが1つのファイルに連結されると想像してください。

より速い

  1. grep 'keyword' file
  2. SELECT * FROM foobar WHERE id = 'keyword'

データがどこにあるかだけでなく、どのようにデータを注文し、どのような操作を実行できるかが重要です。PostgreSQLは、Bツリー、ハッシュ、GiST、SP-GiST、GIN、およびBRINインデックス(および拡張機能によるブルーム)をサポートしています。ランダムアクセスが速いため、その数学と機能がすべてなくなると考えるのは愚かなことです。


31
ただの補足-OPは、「ランダムアクセス」と「コンテンツアドレス可能アクセス」を混同しないように注意する必要があります。OPが述べたように、「ランダムアクセス」とは、メモリの各バイトへのアクセスがO(1)であることを意味します。ただし、その「ランダムアクセスメモリ」内のデータを見つけるには、引き続きデータを順番に検索する必要があります。つまり、メモリに「このようなデータを見つけて」と頼んで、魔法のように渡してもらうことはできません。
ボブジャービス-モニカの復活

2
@BobJarvisあなたは正しいです。コメントをもっとEvanCarrollさん@片付けることができますインデックスとさえ問題を副指標、およびだけでグラブが理由の例として、「何が高速です」O(1)DBが提供するユースケースには十分ではありません
アブドゥル

12

あなたの投稿に基づいて、RDBMSルックアップ時間の最適化はIO時間を無視できるようにするハードウェアに置き換えられているという明確なメッセージがあるようです。

これは絶対に真実です。データベースサーバー上のSSDと高い(実際の)RAMを組み合わせることで、IO待機が大幅に短縮されます。ただし、RDBMSのインデックス作成とキャッシングは、この巨大なIOブーンを備えたシステムでさえ、不適切なインデックス作成が原因でクエリのパフォーマンスが低下することでIOボトルネックが発生する可能性があります。これは通常、高負荷のアプリケーションまたは不十分な記述のアプリケーションでのみ見られます。

一般的なRDBMSシステムの重要な価値は、データの一貫性、データの可用性、およびデータの集約です。Excelスプレッドシート、csvファイル、または「データベース」を保持する他の方法を使用しても、保証はありません。

SSDは、何らかの理由(ネットワーク、OSの破損、電力損失)でプライマリサーバーが使用できなくなることから保護しません。SSDは、不正なデータ変更からあなたを保護しません。SSDは、分析を「ただ持つ」ことと比べて、実行を速くしません。


私はより深い洞察を得てきましたが、私は/ HDDワットDB上のデータストレージVS生SSDのデータ記憶装置の文脈で求めていた、そして、あなたの答えは(私から不良による質問フレージングに)SSD上のDBのコンテキストにあります
アブドゥル

4
@Abdulその比較は、りんごからつり橋までです。rawデバイスは、ストレージの大きな広がりをもたらします。データベースを使用すると、データモデルに従ってそのストレージを整理およびアクセスできます。ここでのジョシュのポイントは、「高速」だからraw SSDは素晴らしいことであり、そのrawボリュームですべてのデータストレージを実行するためのコードを書くだけだという星空のアイディアでこれに入ると、最終的にデータベースを作成することになります。
Blrfl 16

8

ボブおじさんは、おそらくRedisGemfireなどのメモリ内データベースについて話していたでしょう。これらのデータベースでは、データベース内のすべてが実際にRAMに含まれています。データベースは空で始まり、存続期間の短いデータ(キャッシュとして使用される)でファイリングされるか、ディスクからすべてをロードして定期的にチェックポイントの変更をディスクに読み込むことで開始されます。

これは、RAMが安価になり、メモリ内のクラスタ化されたデータベースにテラバイトのデータを格納できるようになるため、ますます一般的になっています。物事に瞬時にアクセスできることから、SSDのような高速ディスクでさえもRAMに入れることが重要になるユースケースがたくさんあります。理にかなっている場合は、これらの一部に対してSQLを使用し続けることもできます。

これがOracleを心配する必要があるのはなぜですか?データは増え続けており、RDBMSがなくなることはほとんどありません。ただし、オラクルの長年にわたるエンジニアリングの時間の多くは、回転ディスクでのデータ取得を非常に高速にする方法に費やされています。Oracleは、完全に異なるストレージ層に適応する必要があります。Oracle Database In Memory使用していますが、過去とは異なる競合にさらされています。クエリオプティマイザーがディスク上のもののレイアウトに基づいて適切な戦略を選択することを確認するのにどれだけ時間がかかったかを考えてください。


あ。私は、このようなインメモリ・データベースなどがあり、物事を知らなかった
アブドゥル

1
別の例として、SQLiteはメモリ内で実行できるため、別のデータベースを使用する必要はありません
user151019

8

もともと質問コメントとして残された回答を収集するコミュニティWiki投稿


私はちょうど反対だと思います。読み取り/書き込み速度が非常に速いため、GPUで高速化されたデータベース(BlazingDBAlenkaなど)を使用して、さらに高速に数値を計算できます。より複雑なクエリをより高速に実行できるようになりました。現在、人々が実行することすら考えていないクエリは、妥当な速度で実行できます。複雑で、データが多いほど良い結果になります -Cyber​​Nard

ボブ・マーティンは長い間存在しており、彼の意見は一般的に聞く価値がありますが(同意しない場合は:-)、この場合、彼は「リレーショナル・データベースの死が私たちに迫る」群衆に飛び込んでいると思います私は準会員です:-)。限られた状況下でのいくつかの事柄については、非リレーショナルデータベーステクノロジーが優位性を提供できるというやや説得力のある議論をすることができます。とはいえ、IMOにはさまざまな方法で欠陥があるリレーショナルモデルが存在しますが、それでも今日利用可能な最高の汎用データベースモデルを提供しています。YMMV。- ボブ・ジャービス

データベースを使用する主な理由は、ディスクが遅いためではなく(本来、データベースを使用しない理由として挙げられてました)、データが複雑であるためです。データベースの主な目的は、複数のアプリ/ユーザーが正しいデータを見つけられるようにし、制御された方法で同時に変更できるようにすることです。これを迅速に行うことは、データベースの2番目の目標にすぎません。- RBarryYoung

RDBMSはすぐにはなくなりません。一部のタイプのアプリケーションには最適な選択肢であり、他のアプリケーションにはNoSQL(Mongoなど)が最適な選択肢です。コース用の馬。- sh1rts

データベースはデータの整理に役立ちます。とにかく、そもそもデータへの高速アクセスのために設計されたわけではありません。- JI翔

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.