在我們的系統中有一個(很常見)的情況,用戶的行爲可以觸發操作,涉及將標籤設置/從節點和之間的關係總計數十萬個實體的關係。 (從100K節點中刪除標籤A
,將標籤B
設置爲80K標籤,將屬性[x,y,z]
設置爲20K節點等等)。當然,我不能在一次交易中把它們全部擠走,並且,由於這些節點可以很容易地分成大量的子集,因此我在一些單獨的事務中執行這些操作,當然這些事務當然會中斷所有的ACIDity,但在性能方面令我們滿意。但是,如果我試圖將這些交易嵌套到一個大型交易中以將它們全部統一爲,則該頂級交易會嘗試跟蹤所有內部交易對數據庫的更新,這當然會導致極差的性能。處理大型交易:任何時間/內存權衡?
你們可以推薦我解決這個問題嗎?
我的配置(當然,它的相關部分):
"org.neo4j.server.database.mode" : "HA",
"use_memory_mapped_buffers" : "true",
"neostore.nodestore.db.mapped_memory" : "450M",
"neostore.relationshipstore.db.mapped_memory" : "450M",
"neostore.propertystore.db.mapped_memory" : "450M",
"neostore.propertystore.db.strings.mapped_memory" : "300M",
"neostore.propertystore.db.arrays.mapped_memory" : "50M",
"cache_type" : "hpc",
"dense_node_threshold" : "15",
"query_cache_size" : "150"
任何提示和線索,我們非常感激:)
你提供了多少堆?如果你有合理的堆大小(例如4到16GB,你應該可以將1M操作合併到一個巨大的Tx中)。 – 2014-10-30 02:59:06
您當然不需要450M節點存儲,請閱讀mmio緩存配置部分,或者查看您的存儲文件以找到適合mmio配置的明智值。 – 2014-10-30 03:00:09
我讀了這部分並做了數學計算,實際上它比我現在需要的要多一點,但還有其他一些操作,比如選擇(可能大約100K)具有特定標籤的節點並從中讀取一些屬性,並且可能會有> 1同時要求這樣的性質,所以我決定在那裏放一些(不)相當大的數字。 – tkroman 2014-10-30 10:16:48