2017-08-08 27 views
-2

タイムスタンプcolmun tsのテーブルtがあると仮定すると、tは時間外のデータで埋められます。 データは、行間(一定の間隔ではない)で数秒間隔でn行のバーストで挿入され、比較的長い時間挿入されないと仮定することは妥当です。私はそれを見つけることを探しています。なにか提案を? MySQLのコードサンプルは素晴らしいことだが、また知られているアルゴリズムの提案を使用するか、何が同様に良いことができますので、MySQLを使用して平均バーストサイズの計算

Imが...

+2

テーブルとデータを私たちと共有し、期待される結果を提供してください。 –

+1

参照:[私は非常に単純なSQLであると思われるMCVEを提供するのはなぜですかクエリ?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query) – Strawberry

答えて

1

私が正しくあなたの問題を理解していれば、それが問題のように聞こえるIあまりにも前に解決しなければならなかった。 (私には偽装されていましたが)

MySQLには、前後のレコードの違いを効率的に見る方法はありません。私は、テーブルにリンクリストを導入することでこれを回避しました。

これを実行するコストはすべて挿入であり、削除は、(ダブル)リンクされたリストを維持しているトランザクション上安全な手順を経なければならなかった。私は美しく働いたストアドプロシージャのペアを選択しました。その後、任意のレコードと何先行それは単にの間のギャップを照会

+------------------------------------+ 
| id | insert_ts | prev_id | next_id | 
+------------------------------------+ 
| 1 | 12:32  | NULL | 2  | 
| 2 | 12:34  | 1  | 3  | 
| 3 | 12:40  | 2  | NULL | 
+------------------------------------+ 

prev_idnext_idに自体への外部キーと一意索引。)

:データセットが得られ

このように見えました。

SELECT 
    my.id, 
    my.insert_ts - prev.insert_ts 
FROM table AS my 
LEFT JOIN table AS prev ON (my.prev_id = prev.id) 

日付/あなたが適切な時間比較関数を使用して、タイムスタンプではなく、MAを使用しているか確認します上記のように、「マイナス」のテーマになります。

パフォーマンスを保証するために、これは金融システム上の適度に高いスループットのテーブルでした。データの一貫性は堅固で、スループットにボトルネックはありませんでした。私は挿入/削除するルーチンを実装する方法についていくつかのヒントを提供することができます。

+0

いいリンクリストの実装ですが、バーストサイズnの計算はどうですか?あなたはそのことをどうお勧めしますか? –

+0

私はあなたの元の質問を理解していない可能性があります、私は答えた例の 'SELECT'クエリがどのように実証されたと思ったのですか? 「n」は任意の2つのレコードが挿入される時間*であることを理解していますか? – wally

+0

レコード数で10秒(タイムスタンプAからBの期間として)までに挿入されたレコードの数を調べたい場合、最も適切な方法は、そのデータをストアドプロシージャに繰り返しプロットすることですまたはあなたの選択した言語)。 SQLは、(テーブル内の)利用可能なデータによってのみグループ化できます。 – wally