Solidity
用於快速檢索的本地記憶體數據庫
我目前正在為基於乙太坊的私有區塊鏈開發 dApp。雖然它執行良好並且 dApp 真正展示了區塊鏈的力量,但它缺乏 SQL 數據庫的速度和多功能性。(我知道我知道區塊鏈!= 數據庫)。
它缺乏的範例是獲取特定數據。因為您沒有類似 SQL 的查詢,所以您需要遍歷大量數據。或者,如果您想要返回一個結構數組,這也會帶來問題。
因此,我正在考慮一種記憶體機制,將網路驗證的數據記憶體在本地數據庫中,以便快速查詢。
Google在搜尋這個時失敗了,所以我的問題真的不存在這樣的事情嗎?如果它不存在,如果我想自己設計這樣的系統,我需要記住什麼。
分兩部分回答。
“你需要循環”:這只是在我身上跳出來,值得評論。智能合約不會為您提供索引儲存,但這並不意味著合約應該遍歷雜亂無章的數據。事實上,合約不能在無界集合上循環。相反,這意味著合約負責在內部組織數據。根據需要組織指針/索引以支持隨機訪問和互動。這裡有一些例子。請參閱 Mapped Struct with Index:Solidity是否存在解決良好且簡單的儲存模式?
合約不能在行/實例上循環,因為這會導致交易成本上升。更多往返=更高的成本。在塊氣體限制下,所有交易都將失敗。不好。
數據庫記憶體:創建綁定到鏈上源的鏈下數據庫是完全有效的。鏈上來源通常被認為是權威的。如果您遵循所有重要狀態更改都應伴隨發出事件的做法,那麼伺服器可以偵聽創建、更新、刪除操作。如果認真完成,應該可以引導一個空數據庫並重新創建合約的整個狀態歷史 - 數據庫應該趕上實時狀態。
etherscan.io 和交易所等網站使用類似的方法。出於性能原因,訪問者實際上是在“訪問”數據庫,而不是實際的區塊鏈。
希望能幫助到你。