私はデータベース システム設計の初心者です。多くの記事を読んだ後、シャーディングやパーティション化を行わずに 1 つのテーブルを持つ必要がある制限は何なのか、本当に混乱しました。一般的な答えを提供するのが非常に難しいことは承知しています。物事は
などの要因によって異なります。
- 行サイズ
- データ型 (文字列、BLOB など)
- アクティブなクエリの数
- どのような種類のクエリ
###索引###
- 再読/再書き込み
- 予想される遅延
-
しかし、誰かがこの質問をすると
10 億のデータと数百万の行が毎日追加されたらどうしますか?このような大規模なデータベースの場合、4 回の読み取り、1 回の書き込み、2 回の更新クエリの待ち時間は 5 ミリ秒未満である必要があります。
- 1,000 万行しかないが、更新量と読み取り量が多い場合、何を選択しますか?追加する新しい行の数は関係ありません。高い一貫性と低い遅延が要件です。
-
行数が 100 万未満で行サイズが数千単位で増加する場合、選択は簡単です。しかし、選択に数百万行または数十億行が含まれる場合、事態はさらに複雑になります。
注: 質問では遅延番号について言及しませんでした。お願いします
許容できる遅延の数に基づいて回答してください。また、構造化データについても話しています。
よくわかりませんが、具体的な質問を 3 つ追加できます:
Amazon またはその他の電子商取引注文管理システム用の SQL データベースを選択するとします。注文数は毎日数百万件ずつ増加しています。すでに10億件のレコードがあります。ここで、データ アーカイブが存在しないと仮定します。 1 秒あたり 1000 クエリを超える大量の読み取りクエリ。そして、また書かれています。読み取り:書き込み比率は 100:1
- より小さな数の例を見てみましょう。 abc 用の SQL データベースまたは任意の電子商取引注文管理システムを選択するとします。注文数は毎日数千件ずつ増加しています。すでに 1,000 万件のレコードがあります。ここで、データ アーカイブが存在しないと仮定します。 1 秒あたり 1 万件を超える大量の読み取りクエリ。そして、また書かれています。読み取り/書き込み比率は 10:1
です。
- 3 番目の例: 景品の配布。 1,000万点のグッズをプレゼントいたします。ユーザー1人につきグッズは1つとなります。高い一貫性と低い遅延が目標です。無料配布を待っているユーザーがすでに 2,000 万人いると仮定すると、時間が開始されると、ユーザー全員が無料グッズを手に入れようとするでしょう。
-
注: この質問全体を通じて、次のことを選択すると想定されています。
SQL ソリューション。また、提供された使用例が論理的に意味をなさない場合は、無視してください。数値的な知識を身につけることが目的です。
ベンチマークが何なのかを理解するのを手伝ってくれる人はいますか?現在取り組んでいるプロジェクトの実数値を見ると、非常に多くのクエリを含む大規模なデータベースで、これが観測される遅延であることがわかります。特定のレイテンシーにおける特定の数のクエリに対する選択テーブルの数を正当化するのに役立つものはすべてあります。
MySQL に関するいくつかの回答。すべてのデータベースはディスク容量、ネットワーク遅延などの影響を受けるため、他のエンジンも同様である可能性があります。
SELECT
を作成することも可能です。したがって、クエリがこのように病的であるかどうかを理解する必要があります。 (これは「遅延」が大きい例だと思います。)PARTITIONing
(特に MySQL では) の用途はほとんどありません。詳細: パーティションINDEX
はパフォーマンスにとって非常に重要です。1 日に
100 万行を挿入しても問題はありません。 (もちろん、一部のスキーマ設計によってはこの問題が発生する可能性があります。) 経験則: 100/秒は問題ないかもしれませんが、1000/秒は可能かもしれませんが、それを超えると難しくなります。 #高速取り込みの詳細SPATIAL
、または何らかのテクニックが必要です ここで