0

そのため、Heroku によってホストされている本番環境の PostgreSQL 駆動型アプリケーションに取り組んでいますが、データに必要なリソースの種類がわかりません。

私のデータについて少し

私は4つのテーブル
アカウントを持っています

ID

住所

アフィルス

アカウントには多くの ID があり、アカウントには多くのアドレスがあり、アカウントには多くのアフィルがあります。

おおよそ次のようになります。

1,000万以上のアカウント

1400万以上のアドレス

700万+ID

そして1500万以上のアフィル。

これに対して実行されるクエリは、常にアカウントの名前を使用してフィルタリングしますが、DMETAPHONE または LEVENSHTEIN を使用してマッチングを行います。名前でインデックスする予定でした。

クエリは次のようになります。

SELECT (rows) FROM accounts 
WHERE DMETAPHONE(name) = 'example' AND id IN 
    (SELECT accountID FROM addresses 
     WHERE (conditions)) AND id IN 
         (SELECT accountID FROM IDs 
          WHERE (conditions)). 

これらのタイプの操作で、良好なパフォーマンスを得るにはどのタイプのリソースが必要ですか。データベース用に 2 GB のキャッシュを検討する必要がありますか、それとも 7.5 GB またはそれ以上を検討する必要がありますか? お手伝いありがとう。

4

1 に答える 1

1
  • DB は常に、より多くの I/O から利益を得ることができます。複数のファイル システム (異なる物理ディスク上にあり、Heroku でこれを行う方法がわからない) を取得できる場合は、tablespacesを使用して DB オブジェクトを分散できます。テーブルとそのインデックスを別々のディスクに配置するか、たとえばアカウント + インデックス用に 1 つのディスクを作成し、アドレス + インデックス用に別のディスクを作成してみてください。
  • foibs が述べたように、関数の結果にインデックスを付けることができます。これにより、ユース ケースが大幅に向上します。
  • Postgres は、与えられたすべてのメモリを (非常に大きな領域に入るまで) 有効に活用し、できる限りのものを入れて、典型的なクエリがディスク ファイルを使用する必要がないほど十分な大きさであるshared_buffersことを確認します。work_mem
  • クエリが遅い場合は、SQL を分析して最適化する方が、問題にハードウェアとお金を投入するよりもはるかに効率的です。EXPLAIN ANALYZEそして「Depesz」さんのかわいいプリンターはあなたの友達です。
于 2013-11-12T22:17:52.747 に答える