3
A
回答
1
根據數據庫的大小,連續輪詢和生成校驗和可能對機器來說過於密集。
您是否考慮過監視操作系統文件系統上存儲的上次修改元數據?
6
根據http://www.sqlite.org/fileformat.html SQLite3在數據庫文件的字節24..27
中維護file change counter
。它是獨立的文件更改時間,其中,例如,可以二進制後更改,而沒有任何改變都恢復或回滾:
$ sqlite3 test.sqlite 'create table test (test)'
$ od --skip-bytes 24 --read-bytes=4 -tx1 test.sqlite | sed -n '1s/[^[:space:]]*[[:space:]]//p' | tr -d ' '
00000001
$ sqlite3 test.sqlite "insert into test values ('hello world');"
$ od --skip-bytes 24 --read-bytes=4 -tx1 test.sqlite | sed -n '1s/[^[:space:]]*[[:space:]]//p' | tr -d ' '
00000002
$ sqlite3 test.sqlite "delete from test;"
$ od --skip-bytes 24 --read-bytes=4 -tx1 test.sqlite | sed -n '1s/[^[:space:]]*[[:space:]]//p' | tr -d ' '
00000003
$ sqlite3 test.sqlite "begin exclusive; insert into test values (1); rollback;"
$ od --skip-bytes 24 --read-bytes=4 -tx1 test.sqlite | sed -n '1s/[^[:space:]]*[[:space:]]//p' | tr -d ' '
00000003
爲了真正確保兩個數據庫文件都是「平等」的只能是你轉儲文件後(.dump
),將輸出減少到INSERT
語句並對結果進行排序以進行比較(可能通過一些加密安全校驗和)。但這太簡單了。
1
如果其中一個sqlite數據庫僅用作副本(只讀),並且您想要檢查原始數據庫文件是否已更新,以便您可以更新副本(例如從Web上進行更新,而無需下載那麼你可以比較兩個數據庫文件(數據庫頭文件)的前100個字節http://www.sqlite.org/fileformat.html
對於數據庫頭的字節24..27,SQlite doc說:
24..27 4
文件更改計數器。每一個數據庫事務提交時,存儲在這一領域的32位無符號整數的值增加
看來,當一個數據庫事務提交的文件更改計數器不增加,但只有經過一些測試包含select語句,這是您在事務中包裝選擇並提交結束事務時所需的行爲。
相關問題
- 1. SQLite校驗其數據嗎?
- 2. Sqlite中的校驗和計算表
- 3. 根據數據扭轉校驗和
- 4. Liquibase - 校驗和因不同的數據庫供應商而異
- 5. Fletchers16校驗和適合小數據嗎?
- 6. 從MD5校驗和中提取數據
- 7. 數據庫併發性 - 校驗和vs時間戳
- 8. Visual Studio數據庫單元測試 - 校驗和
- 9. Elixir中CRC16校驗和的庫
- 10. maven:「校驗和校驗失敗,沒有可用的校驗和」,爲什麼?
- 11. Jquery校驗和
- 12. Laravel數據庫字符集和校對
- 13. SQLite數據庫和Python
- 14. Android ExpandableListView和SQLite數據庫
- 15. SQLite數據庫和語言
- 16. Android SQLite數據庫和SharedPreferences
- 17. AsyncTask和SQLite數據庫
- 18. Monotouch和sqlite數據庫
- 19. sqlite數據庫鎖定後校園帳戶
- 20. 使用校驗和標記共享庫
- 21. Adler32和MD4的校驗和
- 22. HDFS中的數據完整性:哪些數據節點驗證校驗和?
- 23. IPV4頭校驗和驗證
- 24. 數據庫SQLite的
- 25. 如何驗證我的數據庫中存在的數據sqlite
- 26. 校驗和VBScript中
- 27. MD5/SHA1校驗和
- 28. 校驗和計算
- 29. 增量校驗和
- 30. OpenSSL SHA1校驗和
+1以我沒有想到的方式使用od。 – 2011-02-17 13:25:08