我實現Neo4j的客戶端BG benchmark。有11個功能,模擬11種不同的社交活動。每個函數都有自己的事務主體。但是當我使用100個線程運行時,有時會引發死鎖檢測異常。Neo4j的死鎖
我有用戶爲節點和友誼的關係。我邀請朋友,拒絕朋友,接受朋友並融合所有有兩個用戶的朋友作爲他們的投入。他們工作的方式是獲取一個用戶節點的所有關係,並找到與另一個用戶節點的關係。
是任何人察覺鎖定的Neo4j的機制呢?
我實現Neo4j的客戶端BG benchmark。有11個功能,模擬11種不同的社交活動。每個函數都有自己的事務主體。但是當我使用100個線程運行時,有時會引發死鎖檢測異常。Neo4j的死鎖
我有用戶爲節點和友誼的關係。我邀請朋友,拒絕朋友,接受朋友並融合所有有兩個用戶的朋友作爲他們的投入。他們工作的方式是獲取一個用戶節點的所有關係,並找到與另一個用戶節點的關係。
是任何人察覺鎖定的Neo4j的機制呢?
你可以閱讀有關在Neo4j documentation死鎖。當您對同一實體(節點或關係)進行併發修改時,可能會出現這些錯誤。請注意,在修改實體時,可能會使用多個鎖:例如,對於關係,將採用通過關係連接的兩個節點上的鎖。
默認鎖定行爲:
的鎖將被添加到該交易,並在交易完成後公佈。
BG基準選取兩個隨機用戶,並調用與輸入隨機的行動之一。但每次選擇兩個用戶時,它會鎖定它們,所以其他線程將無法選擇這些用戶。通過這個我的意思是兩個線程不可能選擇兩個相同的用戶。 – user3353973
這將有助於描述你在交易中做什麼。僵局可能來自對關係的鎖定:假設你有用戶A和B,他們有兩個共同的朋友C和D:A - C - B和A - D - B。同時移除A和B可能會導致死鎖,因爲兩者都需要C和D上的鎖。 – RaduK
有一個用戶查看好友列表操作,該操作將鎖定該特定用戶的所有友誼關係以對其進行計數。假設函數viewFriend(u1)將鎖定所有用戶u2-u10。同時u2可能想要邀請u10,它需要鎖定u2和u10,但它不能!所以我認爲這是因爲對圖的任何訪問都會獲得相同的鎖: - ? – user3353973