2009-05-12 46 views
0

私はデータベースに時間温度データを保存しています。これは実際にはCSVデータです。最初の列は、次の(一つ以上)の列(複数可)温度であると、ゼロから始まる、秒単位の時間である:時間温度データをDBに保存

0,197.5,202.4 
1,196.0,201.5 
2,194.0,206.5 
3,192.0,208.1 ....etc 

各プロット約2000秒を表します。現在私はデータをoutput_profile longtextフィールドに格納する前に圧縮しています。

CREATE TABLE `outputprofiles` (
    `id` int(11) NOT NULL auto_increment, 
    `output_profile` longtext NOT NULL, 
PRIMARY KEY (`id`) 

これはかなり役に立ちます...私は約2.5Kまでのプレーンテキストの10Kであるプロットを圧縮できます。このデータは別のテーブルで参照されているだけなので、検索や索引付けは必要ありません。

私の質問:このデータを保存する方法はありますか?ストレージ容量の面で効率的ではないと思いますか?

答えて

3

ストレージスペースがアプリケーションの制約を制限すると思われる理由はありますか?私は、アクセスと使いやすさに比べて、それを優先する前にそのように確信しようとしています。その目的のためにあなたが持っているもののように聞こえます。

+0

私のお婆さんが言っていたように、ディスク容量は安いです。 –

+0

私はおそらく時期尚早に最適化しようとしています。しかし、私はちょうど完全に行方不明だったり、考えていないことがあるかどうかを見たいと思っていました。ありがとう。 – brianz

1

「プロットを圧縮する」とはどういう意味なのですか? 2000年の測定値を圧縮していること、または各行を圧縮していることを意味しますか?

とにかく、スペースは安いです。私はそれを伝統的な方法、すなわち2つの列、各測定ごとに1つの項目で作成します。

何らかの理由でこれがうまくいかず、2000測定値を1レコードとして保存したい場合は、それをかなり良くすることができます。

。測定値を含むcsvファイルを作成します。 。それを圧縮する(gzip -9は最大圧縮を与える) 。

は、それからちょうどDBでそれを保存LONGTEXTとしてNOT(使用しているDBを依存したり LONGBLOBブロブとして保存します。

これは最大限の圧縮を提供します。

0

PostgreSQLはすべてのタプル(テーブル内の行のプレゼンテーション)がデータ(PostgreSQL 8.3)を除いて28バイトであるため、大きな記憶スペースのオーバーヘッドがあります。 2,4,8バイトの整数があり、タイムスタンプは8バイトです。浮動小数点数は私が考えると8バイトです。したがって、PostgreSQLに1,000,000,000行を格納するには、MySQLよりもいくつかのGiBストレージが必要です(MySQLで使用するストレージエンゲージメントによって異なります)。しかし、PostgreSQLはMySQLに比べて巨大なデータを扱うのにも優れています。巨大なMySQLテーブルへのDDLクエリをいくつか実行してみると、私の言いたいことがわかります。しかし、このシンプルなデータを格納することは、おそらくパーティションを大きく分割するのが簡単なはずなので、単純なMySQLを使ってうまく処理できます。しかし、私がいつも言っているように、特定のMySQL機能が必要なのかどうか本当にわからないのなら、PostgreSQLに行くべきです。

この質問には、この2つのデータベースのみがタグ付けされているため、この投稿はMySQLとPostgreSQLのみに限定されています。

編集:申し訳ありませんが、あなたは実際にCSVをDBに保存していませんでした。

関連する問題