現在、私は非常に大きなWebシステムを構築しており、強力なSQLデータベースソリューションが必要です。いくつかのタスクは読取り専用(MyISAMエンジン)でなければならず、その他は大規模書込み(InnoDB)であるため、PostgresでMysqlを選択しました。Mysql OR mysql + sqlite OR mysql + ownソリューション
この読み取り専用機能について質問があります。それは非常に高速でなければなりません。ユーザーは1秒未満で回答を得る必要があります。 レッツは、私たちが10以下数百万行と行の約150百万人に「element
」という名前の別の1で「object
」という名前の1つのウェルインデックステーブルを持っていると言います。 また、だから我々は、テーブルの上にパーティションをやろうとしている「element
を」テーブルとテーブルからオブジェクトを結ぶ「element_object
」の情報を含む「element
」という名前のテーブル「object
」(行数億)
を持っており、「element_object
8192個のテーブル「element_hash_n{0..8191}a
」と24576個のテーブル「element_object_hash_n{0..8191}_m{0..2}
」とを有する。
ユーザの質問への回答は、2段階の検索のようになります。テーブルからの要素のidを探す
- 「element_hash_n」
- 主なSQLは、「オブジェクト」テーブルで選択し、テーブル「element_objectに参加ください見つかった(最初のステップからの)ID
となるフィルタする..hash_n_m」私は最初のステップについての疑問: 何が良いだろう。
- mysqlの
- で32Kのテーブルの上にストア(すべて)1つのSQLiteデータベースを作成し、そこに最初のステップの目的
- のための8192のテーブルを格納8192個の異なるsqliteのファイル(データベース)
- を作成し、ファイルシステム内の8192個のファイルを作成して作りますIDを見つけるための独自のバイナリソリューション。
私は私の英語のためすみません。私の母国語ではありません。
なぜ3つのテーブルに比べて何千ものテーブルを持つ方が良いと思いますか? –
テーブルは使用可能なRAMよりはるかに大きいので、パーティション化は3つのテーブルより優れていると思います。もちろん、いくつのテーブルが必要かという疑問があります。 –
なぜデータベースは、一度にメモリ全体でテーブル全体(または、おそらくより関連してインデックス全体)を保持しなければならないと思いますか?それは...限定的なものになるでしょう... –