0
我有一個Web應用程序,其中一個功能是不斷將行附加到大表中。該行看起來大約是這樣的:從不斷追加的表格中可靠地讀取
id bigint not null primary key
visited datetime not null
ip_address
# Other fields
這是一個跟蹤表,因爲你可能已經猜到了。這個表 的使用是完全附加的,也就是說,在插入 之後沒有修改行。
但是,我們的數據量顯着增加,並且需要 將統計處理單獨處理到其他表中,而不是立即查詢數據並對其進行計算。基本上,我已經寫了一個獨立的程序 其中大約做這(僞代碼)
while (true) {
Select rows from tracking table where id > last_id
Feed rows to stats processing thread
last_id = max(id from rows)
sleep some amount of time (~30sec is what I'm currently using)
}
不過,我擔心我會缺失行。由於 在我選擇跟蹤表中的行的時候會出現ID差距,因此某些行ID有 已被保留,但這些事務中的數據尚未提交,並且在 下一個循環中已經存在轉移到更新的ID。
我一直想知道如何協調這一點,因爲當計算 統計數據不是真正的選項時缺失數據。
這裏是我一直在折騰各地的各種選項:
重新設計上有點像參觀時間
不要使用關係數據庫表或查詢,但一些數據排隊系統?
查詢上的時間差表,即WHERE ID> last_id並參觀< NOW() - 一段時間
也有可能有我沒有考慮的選擇。什麼是最好的 方式查詢表,所以我不會錯過任何數據?
感謝您花時間回答:)我決定實施您的答案變體。因爲在存儲和處理數據之間的低延遲是一個優先事項,所以我仍然要從原始表中讀取(跳過複製和ETL),但是我會爲分析引擎保留另一個表來記錄它的ID看到。 – Crast
@Crast聽起來不錯,祝你好運! –