私はファイル数が数億(数ペタバイト)のファイルシステムを持っており、statが返すすべてのものを取得して何らかのデータベースに格納したいと考えています。現在、私たちは中央キューからディレクトリ名を与えられたMPIプログラムと、statコールを使ってNFSをスラムするワーカーノード(これはあまりにも苦労せずにこれを処理できます)を持っています。その後、作業者ノードはpostgresにヒットして結果を保存します。分散ファイルシステム上でのファイルの移動
これは機能しますが、非常に遅いです。最新の30ノードクラスタでは、1回の実行で24時間以上がかかります。
誰でも集中的なキューを持つ代わりにディレクトリ構造を分割するアイデアがありますか(私はこのための正確なアルゴリズムはNP困難です)?また、postgresをMongoDBのautoshardingのようなものに置き換えることを検討してきました(ポストグルは現在大きなボトルネックになっているので)。
私は、この設定がどのように改善されるかについての一般的なアイデアを探しています。
残念なことに、2.6カーネル監査サブシステムのようなものを使用することは、このファイルシステムにぶつかるすべてのマシンで実行するのが(政治的な方法で)非常に難しいため、おそらく疑問にはなりません。
このファイルシステムを使用するすべてのマシン(数千)は、Linux 2.6.xを実行しています。
実際の主な目的は、特定の日付より古いファイルを検索して削除できるようにすることです。また、ファイルシステムの使用方法に関する一般的なデータも収集したいと考えています。
ボトルネックはどこですか?データベースI/O、ディスク(すなわちstat)I/O、処理、...? – GaretJax
また、MongoDB以前はRedisの使用を検討していました。これはあなたのユースケースに対してはるかに適切な解決策に思えます(最終的には実行するクエリに依存します)、MongoDBよりも高速です。 – GaretJax
@ GaretJax現在、最大のボトルネックは、stat呼び出しとdb書き込みです。私はレディスについても詳しく見ていきます。 –