このアプリケーションでは、3 つの整数列 (ソース、タイプ、時間) によってインデックス付けされた大量のデータを保持します。そのデータのかなりのチャンクを読み込むには時間がかかる場合があります。私たちは、高解像度を必要としないクエリのために大きな粒度を保存するなど、より大きなクエリのために検索して読み込む必要があるデータの量を減らすために、さまざまな対策を実装しました (時間-賢い)。
データは bzip 圧縮されたテキスト ファイルに保存されていますが、基本的に同じ構造を持っているバックアップ アーカイブ内のデータを検索すると、ディスクに展開して grep するよりも、stdout に展開して grep でパイプする方がはるかに高速であることに気付きました。ファイル。実際、圧縮されていないファイルを grep するよりも、tar からパイプへの展開の方がはるかに高速でした (つまり、tar からディスクへの展開を割り引きます)。
これにより、ディスク I/O のパフォーマンスへの影響は、実際には思ったよりもはるかに重いのではないかと考えました。だからここに私の質問があります:
複数行のデータを単一行の (圧縮された) BLOB フィールドに入れ、抽出中にその場で単一行を検索する方が、テーブル インデックスを介して同じ行を検索するよりも高速になると思いますか?
たとえば、このテーブルを持つ代わりに
CREATE TABLE data ( `source` INT, `type` INT, `timestamp` INT, `value` DOUBLE);
してただろう
CREATE TABLE quickdata ( `source` INT, `type` INT, `day` INT, `dayvalues` BLOB );
クイックデータの各行に約 100 ~ 300 行のデータがあり、ブロブ フィールドの解凍およびデコード中にその場で目的のタイムスタンプを検索します。
これはあなたにとって意味がありますか?どのパラメータを調査する必要がありますか? どのような文字列が接続される可能性がありますか? 同様の効果を達成するために、どのような DB 機能 (任意の DBMS) が存在しますか?