我注意到我的(純Python)代碼中很大一部分處理表。當然,我有支持基本功能的class Table
,但我最終爲它添加了越來越多的功能,例如查詢,驗證,排序,索引等。使用sqlite3 vs自定義表實現的優點和缺點
我想知道刪除它是個好主意我的class Table
,並重構代碼使用常規關係數據庫,我將實例化在內存中。
這裏是我的想法至今:
查詢和索引的性能將提高,但Python代碼和單獨的數據庫進程之間的通信可能會比Python函數之間的效率較低。我認爲這是太多的開銷,所以我將不得不使用Python自帶的sqlite並且生活在同一個進程中。我想希望這意味着它是一個純粹的性能增益(以非標準SQL定義和sqlite的有限功能爲代價)。
使用SQL,我將獲得比我想要編碼自己更強大的功能。似乎有一個明顯的優勢(即使使用sqlite)。
我不需要調試我自己的表的實現,但在SQL中調試錯誤很難,因爲我不能放置斷點或輕鬆打印臨時狀態。我不知道如何判斷我的代碼可靠性和調試時間的整體影響。
該代碼將更容易閱讀,因爲代替調用我自己的自定義方法,我會編寫SQL(每個需要維護此代碼的人都知道SQL)。但是,處理數據庫的Python代碼可能比使用純Python
class Table
的代碼更醜陋,也更復雜。再說一遍,我不知道哪個更好。
對上述的任何更正或其他任何我應該考慮的問題?
是的,這就是爲什麼我認爲sqlite是內存數據庫的唯一合理選擇。我不知道是否還有其他性能問題;我不確定IPC甚至可能不會成爲問題(這會讓我考慮更復雜的數據庫而不是sqlite)。 – max 2010-11-09 17:57:07
我不是故意調試sqlite;我打算調試我自己的代碼:我認爲當我使用自己的'class Table'而不是sqlite時,可以更容易地看到表中的內容並在各種條件下中斷。至於多名作者,你能澄清一下你的意思嗎(我的代碼當然是單線程的)。 – max 2010-11-09 18:02:38
@max:我想我已經更新了我的答案以回答這個問題...... – derobert 2010-11-09 18:08:18