我見過很多關於如何在appengine中實現唯一約束的文章和問題,但實際上我沒有發現任何關於爲什麼這個功能不存在的解釋。Google Appengine爲什麼沒有獨特的限制?
如果appengine開發者認爲最好不要實現這樣的功能,我相信他們有很好的理由,但我有興趣瞭解他們爲什麼決定如此。
這個決定是由性能問題引導的嗎?爲什麼?
任何關於此的詳細解釋將不勝感激。
我見過很多關於如何在appengine中實現唯一約束的文章和問題,但實際上我沒有發現任何關於爲什麼這個功能不存在的解釋。Google Appengine爲什麼沒有獨特的限制?
如果appengine開發者認爲最好不要實現這樣的功能,我相信他們有很好的理由,但我有興趣瞭解他們爲什麼決定如此。
這個決定是由性能問題引導的嗎?爲什麼?
任何關於此的詳細解釋將不勝感激。
由於該文章鏈接在這裏http://code.google.com/p/googleappengine/issues/detail?id=178#c14表示,數據存儲的分佈式特性使得難以執行一個唯一的約束。如果兩個應用程序實例同時嘗試創建一個實體,每個實體都應具有唯一的屬性,則執行此操作的唯一方法是需要在數據存儲區中的所有計算機上進行某種協調。
想象一個26人的房間,每個人都有一張紙,上面有一張寵物桌子和他們的主人。每個人用不同的字母表字母來控制每隻寵物,例如,人1以字母A開頭,人2以字母B開頭,等等。
如果您想確保名爲連指手套的寵物是整個數據存儲區中唯一的連指手套,這很容易,因爲房間裏只有一個人會參與,他們將能夠檢查他們的紙張確保手套不在那裏。
如果你想要求所有者必須是獨一無二的,你可以想象每次有人想在他們的表中寫入一個條目時,他們需要與每一個其他人一起檢查/以確保其他人沒有使用的所有者名稱。這是應用程序引擎的數據存儲不允許除實體鍵之外的任何唯一性約束的根本原因。當數據存儲包含數千個服務器時,根本無法做到這一點。
希望你能明白爲什麼這個限制存在,並希望我的深夜打字不太難看了:d
您可以看到谷歌在他們的issue list for GAE上添加了唯一約束的回覆。
謝謝你爲這個偉大的回答(用很好的例子),我現在好多了明白了! – MatToufoutu