我已經在我的數據存儲一些重複的元素(不整列,但大多數字段就可以了)在App Engine中。查找App Engine數據存儲重複
什麼是找到他們的最佳方式?
我已經是重複的整數和字符串字段(如果比較一個比其他快)。
謝謝!
我已經在我的數據存儲一些重複的元素(不整列,但大多數字段就可以了)在App Engine中。查找App Engine數據存儲重複
什麼是找到他們的最佳方式?
我已經是重複的整數和字符串字段(如果比較一個比其他快)。
謝謝!
一個愚蠢但快速的方法將採取你關心的領域,連接他們作爲一個長字符串,並將它們存儲爲引用原始實體的實體的關鍵。每次你做DB_Unique.get_or_insert()
你應該驗證參考是否是正確的原始實體,否則,你有一個副本。這應該可以在map reduce中完成。
喜歡的東西:
class DB_Unique(db.Model):
r = db.ReferenceProperty()
class DB_Obj(db.Model):
a = db.IntegerProperty()
b = db.StringProperty()
c = db.StringProperty()
# executed for each DB_Obj...
def mapreduce(entity):
key = '%s_%s_%s' % (entity.a,entity.b,entity.c)
res = DB_Unique.get_or_insert(key, r=entity)
if DB_Unique.r.get_value_for_datastore(res) != entity.key():
# we have a possible collision, verify and delete?
# out two entities are res and entity
有一對夫婦的邊緣的情況下,可能饒人,比如如果你有兩個實體b和c等於(「A_B」,「」)和(」 a','b_'),所以兩者的連接都是'a_b_'。所以使用你知道的字符不在你的字符串中而不是'_',或者有一個引用列表並且比較所有這些字符。
如果這是一次或很少發生的情況,您可能想嘗試將整個數據庫轉儲到本地計算機 - 請參閱uploading and downloading data - 將數據加載到sqlite3數據庫中,並使用它找到重複的密鑰。
試圖以編程方式做到這一點在GAE上側可能會變成相當繁瑣。與任務完全可行,但不是太容易。
我已經超過35K的記錄,我希望會是隻是一個時間的事情。 – ana 2011-01-25 21:22:47
這是一個非常整潔的解決方案,肯定是+1 – systempuntoout 2011-01-25 22:09:27