2010-04-01 22 views
21

Số ký tự tối đa có thể được sử dụng để xác định key_name của một thực thể datastore là gì?Bao lâu (ký tự tối đa) có thể là một thực thể của kho dữ liệu key_name? Có xấu khi chuyển các key_names rất dài?

Có xấu khi có các tên khóa rất dài không?

Ví dụ: Cho phép nói rằng chúng tôi sử dụng key_names 170 ký tự, độ dài của thư Twitter 140 cộng với 10 ký tự số cho vĩ độ và 10 cho kinh độ và 10 cho dấu thời gian.

(Lập luận của một KEY_NAME như: Vì vậy, bằng cách sử dụng một KEY_NAME như vậy chúng ta có thể dễ dàng và nhanh chóng thể chắc chắn về không đăng trùng lặp, vì cùng một thông điệp không phải xuất phát từ cùng một vị trí và thời gian nhiều hơn một lần.)

+0

tôi có thể thêm một lý do khác cho việc sử dụng tên chính dài. Một trong các kiểu dữ liệu của tôi biểu diễn một mối quan hệ giữa hai thực thể khác (thuộc bất kỳ kiểu nào) và tên khóa của các thực thể của tôi là hai khóa được mã hóa với dấu gạch dưới ở giữa. Nếu các thực thể có cha mẹ (và ông bà, vv), các phím có thể nhận được khá lâu. – yngling

Trả lời

11

Không có độ cứng tối đa - độ dài tối đa của tên khóa là độ dài tối đa của một phím, ít chi phí hơn và các phím có thể dài hơn. Tuy nhiên, việc lưu trữ và truy xuất nó, mỗi mục chỉ mục chứa tên khóa mà nó đề cập đến, vì vậy các tên khóa dài hơn có nghĩa là chi phí lập chỉ mục cao hơn. Nếu bạn muốn đảm bảo tính duy nhất trên một văn bản lớn, tùy chọn tốt nhất của bạn là đặt tên khóa là tổng MD5 hoặc SHA1 của đầu vào, đảm bảo cả tính duy nhất và tên khóa ngắn (-ish).

+2

Vâng, nói chung không có băm - cũng không phải MD5, cũng không SHA1 có thể đảm bảo tính duy nhất. Thực tế nói - Mặt trời sẽ nổ tung sớm hơn bạn bị va chạm với những băm này :) –

41

thực sự, tên khóa được giới hạn trong 500 ký tự giống như giá trị thuộc tính chuỗi. xem ví dụ Key.to_path(), trong đó kêu gọi ValidateString():

http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/api/datastore_types.py#413

mà giá trị mặc định max_len-_MAX_STRING_LENGTH, đó là 500:

http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/api/datastore_types.py#87

+0

Điều này có đúng với ndb không? Gì về java và đi? Tôi nghi ngờ câu trả lời của Nick là chính xác wrt phụ trợ - nó chỉ là phần mềm đó là áp đặt giới hạn này. – mjibson

+0

iirc phụ trợ thực thi cùng một giới hạn. (tôi đã viết rất nhiều, nhưng đó là một lúc trước, và tôi không có quyền truy cập vào mã nữa. P) trong mọi trường hợp, thật dễ dàng để kiểm tra trong ndb, đi, vv – ryan

+1

Chỉ để xác nhận trong hiện tại, những gì @ryan nói vẫn đúng với việc xác thực trong phần phụ trợ. –

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