私はpostgresql dbを使用しています。 私のアプリケーションは、同じタイプの多くのオブジェクトを管理します。 私のアプリケーションは強烈なdbの書き込みを行います - 各オブジェクトには少なくとも30秒に1回dbが挿入されています。私はまた、オブジェクトIDでデータを取得する必要があります。 私の質問は、どのようにデータベースを設計するのが最適ですか?すべてのオブジェクト(より遅い挿入)に1つの巨大なテーブルを使用するか、オブジェクトごとにテーブルを使用します(より複雑な検索)。postgres多数のテーブル対1つの巨大テーブル
答えて
テーブルには、同じタイプの膨大な数のオブジェクトが格納されます。したがって、オブジェクトごとに1つのテーブルである2番目のオプションは、正しく見えていないようです。もちろん、より多くの情報が必要です。
ヒント:1つのテーブルから始めます。主にパフォーマンスに問題が発生した場合は、それを分割してください。それほど難しいことではありません。
すべてのオブジェクトが引き続き同じ属性を持つことが確実である場合は、おそらく単一のテーブルが最適なソリューションです。
INSERT
テーブルの増加に伴い大幅に遅くなることはありません。–は、データ変更の速度を遅くするインデックスの数です。
私はむしろデータの増加について心配したいと思います。古いデータを取り除くためのデザインはありますか?大きなDELETE
は痛いかもしれません。ときどきパーティション化が役立ちます。
論理的には、1つのテーブルを使用する必要があります。
しかし、PostgreSQLが示すいわゆる「書き込み増幅」の問題は、主な理由の1つであると思われます。Uber switeched from PostgreSQL to MySQL。 、
セカンダリインデックスの数が多いテーブルの場合」、これら 余分のステップは巨大な非効率性を引き起こす可能性があります例えば、 は、我々はそれに定義されたダース・インデックスを持つテーブルがある場合 への更新:見積もり1つのインデックスのみでカバーされているフィールドは、 に新しい行のctidを反映するために12のインデックスすべてを伝播する必要があります。
ワークロードに問題があるかどうかは、測定値のみでわかります。パフォーマンスを測定してから、マルチテーブルに切り替える(またはパーティションを分割する、またはDBMS全体を切り替える)ことをお勧めします。測定がそれを正当化する場合に限ります。
- 1. mySQL:1対多テーブルのクエリ?
- 2. 1対多の関係(Laravel)を持つ複数のテーブル
- 3. 1つの大きなテーブルまたは多数の小さなテーブル
- 4. 巨大なテーブルのMySQLアップデート
- 5. リストボックス(テーブル)の巨大なデータ
- 6. SQLAlchemyの1対多リレーションシップ(1つのテーブルとジョインテーブル)
- 7. コアデータ多対多のカスタムフィールドを持つテーブル
- 8. SQL JOIN複数の多対多テーブル
- 9. SQL - 複数のテーブルと1つの大きなテーブル
- 10. 1対多のデタッチ子テーブルに基づくCriteria親テーブルのフェッチ
- 11. 多対多テーブルへのアクセス
- 12. Fluent Nhibernateテーブルが複数の列を持つ多対多
- 13. mysqlの1対2の多数のテーブルへの参加
- 14. テーブルが埋め込まれたHibernateの条件1対多テーブル
- 15. より多くの同じテーブルから1つ大きなテーブルを作成
- 16. mysqlデータベースの複数(1対多)テーブルのSQLクエリ
- 17. 巨大な生産テーブルのデータをコピー
- 18. 巨大なmysqlテーブルの最適化
- 19. 巨大なMySQLテーブルのINSERT ... SELECT
- 20. JOINs対多数のテーブルから選択
- 21. 1つの大きなテーブルまたはmysqlデータベース実装の多数の小さなテーブル
- 22. SQLAlchemy 1つのテーブルの継承で1対多の関係 - 宣言
- 23. 1対1の大きなデータステップでの多対多のマージ
- 24. SQL:UPDATE多対多中間テーブル
- 25. Laravel多対多リレーションシップ5テーブル
- 26. Rails(ActiveRecord)多対多テーブル
- 27. SQL:多対多テーブルANDクエリ
- 28. ラーベル - 親と同じテーブルの1対多多く
- 29. Doctrine 1の多対多結合テーブルに列を追加する
- 30. SQLAlchemyプライマリキーを持つ子テーブルを持たない1対多
テーブルの構造は明確ではありませんが、一般的にテーブルにはレコードの挿入、取得、変更、削除などが含まれています。複数のテーブルを作成する特定の理由がない限り、あなたのインデックスを適切に作成してください。おそらく、あなたの質問のテーブルデザインを詳しく説明することができます。 – gmiley