2016-10-23 6 views
-1

私は長時間の統計を収集するように設定しています。それは、それはそれよりも頻繁になりますフィールドを部分的に取得/変更することはできますか?

[date:03.01.2016,data][date:02.01.2016,data][date:01.01.2016,data]... 

この(ちょうどサンプル)のようなみかん..私は、最新の最初の1つのテキストフィールド、にすべてを固執するつもり小さなブロックに記録されますが、小さいままである必要があります私はそれを最適化したいと思うように十分な大きさです。

私は2つのこと

  1. はmysqlのフィールドの前に付加することができますを探していますか?
  2. フィールドを部分的に読み取ることはできますか?最初の100文字だけを読み取ることはできますか?

ブロックは固定長であるため、X期間の統計情報を表示するためにダウンロードする必要のある文字数を正確に推定できます。

+3

これはさまざまな点で悪い考えです。最初に、これらのタイムスタンプの数千またはそれ以上を実際に追加する予定がある場合は、列内のスペースを簡単に超えることができます。また、古い値を更新して追加をシミュレートすることも可能ですが、これもあまりうまくありません。より良いオプションは、各タイムスタンプトークンを独自の_record_に配置することです。 –

+0

誰かがあなたに何らかの期間の統計を聞かれたら、何をしますか?スティングを解析する? –

+0

あなたはこれを行うことによって、サーバー、ユーザー、およびストレージを好むと思いますか? – Drew

答えて

1

あなたの二つの質問への答えは "イエス" です。

update t 
    set field = concat($newval, field) 
    where id = $id; 

そして:(これらはあなたがテーブルに複数の行を持っていることを前提とし)

select left(field, 100) 
from t 
where id = $id; 

言いましたデータを格納する方法は、リレーショナルデータベースでは絶対に適切ではありません。

おそらく、あなたはこのようになりますテーブルをしたい:

create table t (
    tId int auto_increment primary key, 
    creationDate date, 
    data <something> 
); 

dataが複数の列でなければなりません場合、これはより複雑かもしれません。)

次にあなたがテーブルに挿入します。

insert into t(createDate, data) 
    select $date, $data; 

最新の行を取得できます。

select t.* 
from t 
order by tId desc 
limit 1; 

これらのすべては単なる例であり、あなたの質問でデータの完全な画像が得られないためです。

+0

ゴードンが正しいです。 RDMSの 'TEXT'フィールドに連結されたデータをたくさん置くことは、ハンマーを使用して新しい家具にねじを入れるのと同じです。それは混乱を招き、あなたの家具はあなたがそれを使い始めるとすぐに崩壊するでしょう。 –

+0

その少し厄介なことは、何千もの異なるオブジェクト(テーブルの行)のデータを収集し、その統計がオブジェクトのコンテキストでのみ意味をなさないことを考えれば、それらをオブジェクトフィールドとしては、別のテーブルを作成するよりも速く、一般的に効率的です。 – user81993

+0

@ user81993 。 。オブジェクトごとに1行、データごとに1行の 'ObjectData'テーブルが必要です。データを1つの連結フィールドに入れるべきではありません。それは単に間違ったアプローチです。 –

関連する問題