CSV ファイルがある場合、ファイルをプレース テキストのままにしておくか、他の形式に変換した方が速いですか? (検索用)
CSV ファイルの検索に関して、特定の行を (キーで) 取得する最速の方法は何ですか? 申し訳ありませんが、ファイルの並べ替えについては言及していませんが、ファイル内の任意のキーを検索していました。
いくつかの更新:
- ファイルは読み取り専用になります
- ファイルを読み取ってメモリに保持できます
これには、考慮すべき点がいくつかあります。
どのようなデータを保存しますか? これをバイナリ形式に変換することは実際に意味がありますか? バイナリ形式はより少ないスペースを占有しますか (ファイルの読み取りにかかる時間はサイズによって異なります)?
システムの実行中に同じファイルに対して複数のクエリを実行していますか? または、誰かがクエリを実行するたびにファイルをロードする必要がありますか?
異なるシステム間でファイルを効率的に転送する必要がありますか?
これらすべての要因は、決定にとって非常に重要です。一般的なケースは、ファイルを 1 回ロードするだけでよく、多くのクエリを実行することです。その場合、データは後でメモリに保存されるため、どの形式でデータを保存するかはほとんど問題になりません。クエリを処理するための適切なデータ構造について考えることにもっと時間を費やしてください。
もう 1 つの一般的なケースは、メイン アプリケーションを実行し続けることができないため、ファイルをメモリに保持できないことです。その場合は、ファイルを削除してデータベースを使用してください。使用できるデータベースは、思いつくものよりも高速になる可能性が高くなります。ただし、システム間でデータベースを転送するのは簡単ではありません。
ただし、ほとんどの場合、ファイル形式は考慮すべき実際の問題ではありません。非常に長い CSV ファイルをかなり読んだことがありますが、ほとんどの場合、ファイルの読み取りにかかった時間は、後でデータを処理するために必要な時間と比較してごくわずかでした。
検索可能な列にインデックスがあり、カーディナリティが最も高い列に主キーがあるデータベーステーブル(またはできれば正規化されたテーブル)に「変換」(つまりインポート)します。車輪の再発明を行う必要はありません...トランザクション管理、同時実行性など、多くの問題を回避できます。実際に本番環境に移行する場合、csv形式で保持する可能性はほとんどありません。
データが多すぎて本番レベルである場合は、ApacheLuceneを使用してください
その小さなデータセットまたは学習についての場合は、サフィックスツリーと試行を読んでください