所有 我採取了一種使用卡桑德拉2.2歷史表。 我目前的架構具有對用戶ID時間戳的行密鑰和集羣鍵,則每行是一個用戶行爲記錄。我想只保留給定用戶ID的10個最新行。我怎樣才能巧妙地實現這一點?在Cassandra中,如何在一個分區中實現固定數量的行?
感謝您的建議!
所有 我採取了一種使用卡桑德拉2.2歷史表。 我目前的架構具有對用戶ID時間戳的行密鑰和集羣鍵,則每行是一個用戶行爲記錄。我想只保留給定用戶ID的10個最新行。我怎樣才能巧妙地實現這一點?在Cassandra中,如何在一個分區中實現固定數量的行?
感謝您的建議!
鑑於數據模型:
我能想到的最好的是做到以下幾點:
SELECT * FROM history WHERE userid='fromanator' LIMIT 10;
但是,如果用戶在TTL中沒有任何歷史記錄,則採用這種方法,您將無法得到任何結果。根據您的使用情況,這可能是可以接受的。
如果你絕對需要保持至少在過去的10條記錄,那麼你將有一個更復雜的數據模型和應用程序代碼在卡桑德拉實現這一目標。
這可能不是最完美的解決方案,並不會嚴格遵守在任何給定的時間存儲10條記錄,但你可以行數據存儲爲一個列表(如果有結構的行數據,你」 d必須自己處理此結構或使用user defined types)。如果您在寫它已經有這個名單提供給你,你只需將它截斷寫作之前最新的10個值,否則你可能會等待下一次讀取的是,名單上做,直到它截斷10個記錄,然後把它寫回卡桑德拉。
如果您不太關心存儲了多少數據,而只關心檢索最近的10個結果,那麼fromanator's solution(帶或不帶TTL取決於您是否更關心數據或確保10個結果)是最好的。