2011-01-25 30 views
7

Tôi đã sao chép một số phần tử trong kho dữ liệu của mình (không phải toàn bộ hàng, nhưng hầu hết các trường trên đó) trong App Engine.Tìm bản sao trong kho dữ liệu của công cụ ứng dụng

Cách tốt nhất để tìm chúng là gì?

Tôi đã sao chép cả hai trường số nguyên và chuỗi ký tự (trong trường hợp so sánh số nguyên và chuỗi nhanh hơn trường còn lại).

Cảm ơn!

Trả lời

6

Cách tiếp cận ngu ngốc nhưng nhanh chóng là lấy trường bạn quan tâm, nối chúng thành một chuỗi dài và lưu chúng làm khóa của thực thể DB_Unique tham chiếu đến thực thể gốc. Mỗi khi bạn thực hiện DB_Unique.get_or_insert(), bạn nên xác minh tham chiếu là đúng đối tượng gốc, nếu không, bạn có một bản sao. Điều này có lẽ nên được thực hiện trong một map reduce.

Cái gì như:

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 

Có một vài trường hợp cạnh mà có thể leo lên, chẳng hạn như nếu bạn có hai thực thể với b và c bằng ('a_b', '') và (' một ',' b_ ') tương ứng, do đó, nối là' a_b_ 'cho cả hai. do đó, sử dụng ký tự bạn biết không có trong chuỗi của bạn thay vì '_' hoặc có DB_Unique.r là danh sách tham chiếu và so sánh tất cả các ký tự đó.

+0

đó là một giải pháp khá gọn gàng, chắc chắn +1 – systempuntoout

1

Nếu đây là một lần hoặc hiếm khi xảy ra, bạn có thể thử đổ toàn bộ cơ sở dữ liệu vào máy cục bộ - xem uploading and downloading data - tải dữ liệu vào cơ sở dữ liệu sqlite3 và tìm các khóa trùng lặp với nó.

Cố gắng thực hiện điều này theo chương trình ở phía GAE có thể khá buồn tẻ. Với nhiệm vụ hoàn toàn có thể thực hiện được nhưng không phải điều gì quá dễ dàng.

+0

Tôi có hơn 35 nghìn bản ghi và tôi hy vọng đó chỉ là một điều một lần. – ana

Các vấn đề liên quan