cassandra tombstone導致寫資料丟失問題徵解
問題描述:
1.casssandra中資料結構:
ColumnFamily->Column->key-value(key,value,timestamp)
2.cassandra使用timestamp來判斷資料的新舊。
3.cassandra刪除column是透過寫一個新column來實現的,這個column是tombstone。
4.如果新增一個tombstone到cassandra中刪除一個column後,在tombstone還未被清除前,再次寫入一個時間戳更小的相同column,此時會導致這次的寫入成功但使用者查詢不到該次寫入的column。
clue
--------------------------------
how can i get a tombstone’s timestamp?
I understand that tombstones are internal implementation detail ... yet, the fact remains in 0.6.2 that a key/col creation followed by a delete of the key/col will result in the key being returned in a get_range_slices call. If the CF is flushed and compacted (after GCGraceSeconds), the key will not be returned in the get_range_slices call.
++
1.如果有tombstone存在,資料返回遵守讀一致性級別,即取R份一致的資料後返回。2.如果寫tombstone後,一直沒有進行flush+compacted操作,有沒有其他的操作會保證資料的一致性(read repair?)3.怎麼才能獲取到寫入的tombstone(column)的時間戳?cassandra二次開發?
這個問題非常重要,是解決我們問題的關鍵。目前進展:
透過檢視cassandra0.7.5原始碼,發現cassandra的刪除column是透過寫入tombstone 這樣一個實現了IColumn介面的物件,
所以tombstone中必定包含所有IColumn的方法。
1.目前猜是想在獲取tombstone物件是透過封裝做了後臺的判斷,如果是tomestone直接返回null,若此則修改讓tombstone能正常返回。
2.
org.apache.cassandra.db.DeletedColumn
@Override
public long getMarkedForDeleteAt()
{
return timestamp;
}
@Override
public int getLocalDeletionTime()
{
return value.getInt(value.position());
}
:明確兩個方法到底返回的是什麼時間,區別:
getMarkedForDeleteAt()
getLocalDeletionTime()
+++++
hector source code:
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23937368/viewspace-1052615/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用impdp不當導致的資料丟失問題
- 關於 iconv 轉碼導致資料丟失的問題
- Oracle全部索引丟失導致的效率問題處理Oracle索引
- 儲存互斥失敗導致資料丟失的資料恢復成功案例資料恢復
- git合併丟失程式碼問題分析與解決(錯誤操作導致)Git
- 儲存崩潰導致資料丟失如何處理
- 資料庫併發寫入問題-丟失更新與寫入偏差資料庫
- dfm檔案資料丟失問題
- 磁碟損壞導致資料檔案丟失的恢復
- Verdaccio publish 時包含 deprecated 導致歷史版本丟失問題原因分析
- 伺服器不同的故障導致資料丟失都怎麼解決的伺服器
- Django資料庫連線丟失問題Django資料庫
- cassandra業務資料一致性問題處理?
- 重灌系統導致分割槽丟失的資料恢復案例資料恢復
- 關閉資料庫會導致cache的sequence值丟失嗎?資料庫
- Web-請求資料+號丟失問題Web
- Vuex資料頁面重新整理丟失問題解決方案Vue
- 資料庫高可靠,輕鬆解決事務丟失問題資料庫
- 虛擬化還原快照導致資料丟失恢復過程
- EVA4400儲存斷電導致資料丟失如何恢復
- RocketMq訊息丟失問題解決MQ
- Nginx轉發導致請求頭丟失Nginx
- 解決Oracle資料庫日誌檔案丟失恢復問題Oracle資料庫
- 用getChildFragmentManager解決Fragment巢狀Fragment資料丟失的問題Fragment巢狀
- 用資料庫指令碼重建了資料庫,導致資料丟失,還能找回來麼?資料庫指令碼
- 關於Cordova框架對URL攔截導致通訊丟失問題的處理框架
- Google Drive存在未知故障,導致部分使用者丟失雲盤資料Go
- 【資料庫資料恢復】斷電導致Oracle資料庫資料丟失的資料恢復案例資料庫資料恢復Oracle
- 【raid資料恢復案例】raid擴容導致的資料丟失的資料恢復AI資料恢復
- 伺服器資料恢復-誤操作導致mysql資料庫資料丟失的資料恢復案例伺服器資料恢復MySql資料庫
- DNS導致資料庫登入緩慢的問題解決DNS資料庫
- ORACLE資料檔名導致的奇怪問題Oracle
- 【儲存資料恢復】esx vmfs的互斥導致儲存資料丟失的資料恢復案例資料恢復
- 【北亞資料庫資料恢復】誤操作導致資料丟失的華為雲mysql資料恢復案例資料庫資料恢復MySql
- 【北亞資料恢復】vmfs還原快照操作導致SqlServer資料庫資料丟失的資料恢復資料恢復SQLServer資料庫
- SAN LUN Mapping出錯導致的資料丟失恢復全過程APP
- 獲取登入驗證碼失敗及前後端不同域導致session丟失問題分析記錄後端Session
- 關於 5月10號 資料丟失問題反饋