方案如下具體時間緩存經營業務數據整合與歷史記錄的表:有數百個安裝在一些固定的 位置讀卡器如何根據
- 假設,還有數千張卡可能通過通過閱讀器 隨機。
- 每個讀卡器每小時讀卡數據至少10次。
- 在一個讀取期間,讀卡器將多次讀取卡片 取決於卡片停留在讀卡器可以從中讀取數據的字段的長度。因此,當讀卡器讀取卡片時,將生成一個 READ_EVENT,其中包括:reader_id,card_id, times_of_reads,first_seen_time,last_seen_time。
- 閱讀器可以立即將READ_EVENT上傳到後端系統。
- 如果網絡關閉,讀卡器也可以緩存READ_EVENT,當網絡再次OK 時,它將重新傳輸緩存的數據。
因此,我在DaseBase中有一個READ_EVENT表來保存所有事件。
當緩存READ_EVENT來了,我要檢討所有的歷史數據,以發現是否
- 這READ_EVENT應該有存在的事件,這意味着 在此表中一個READ_EVENT會像被更新集成「有一個快速的 first_seen_time並將兩個time_of_read加在一起」或者「有一個 以後的last_seen_time和兩個time_of_read在一起」,或者「只需將兩個time_of_read加在一起」。
- 此READ_EVENT無法與 表中的任何其他事件集成,因此只需將事件插入其中即可。
爲了清楚起見,所述「集成」是指如果這兩個持續時間(從「first_seen_time」到「last_seen_time」)在DB READ_EVENT的和緩存READ_EVENT有一個共同的週期。
這裏有一個問題:
因爲「first_seen_time」 /「last_seen_time」中緩存數據可以是任何時間(昨天,上個月,去年),並且表變得越來越大,這將是非常難以定位應該被集成的READ_EVENT。如何優化數據庫的設計。
很難優化未知的東西。你目前的數據庫設計是什麼,你有什麼具體問題?大桌子本身不是問題。 如果我理解您的要求正確,您想在一個閱讀器上評估一張卡片的所有閱讀事件。一張卡片和一臺讀卡器的平均讀數和最大讀卡次數有多少個不同的讀取事件? – TAM
Hi @TAM,謝謝你的回答。現在在數據庫「READ_EVENT」中只有一個表,這些列是「reader_id,card_id,times_of_reads,first_seen_time,last_seen_time」,並且在不到一個月的時間內從讀者上傳的記錄超過180,000條,因此它會越來越大。因此,當上傳一個緩存數據時,我必須按時間選擇查找表中的哪個記錄應該與它整合,因爲這個緩存的數據所表示的讀取動作可能會在幾天前發生。桌子的增長。 – ricemaster