2012-10-24 64 views
22

Khi tôi tạo một đối tượng bằng phương thức của ndb, nó sẽ tạo khóa tự động của loại Khóa (loại, id) trong đó id là một số. Trên tất cả các tài liệu hướng dẫn nó cho thấy rằng bạn có thể sử dụng một chuỗi cho id của khóa nhưng tôi không thể tìm hiểu làm thế nào để làm điều này tự động khi một đối tượng được tạo ra.Mã khóa tùy chỉnh NDB của Máy ứng dụng Google

Tôi có một mô hình Người dùng và tôi đã suy nghĩ để sử dụng tên người dùng của người dùng (vì nó là duy nhất) làm id của khóa để truy xuất nhanh hơn. Đó có phải là một ý tưởng hay không? Tôi có gặp bất kỳ vấn đề gì với tên người dùng vì người dùng đó đã đăng ký (tôi đang xác thực đầu vào) không?

Trả lời

30
class UserModel(ndb.Model): 
    ... 

user_model_entity = UserModel(id='some_string', ...) 

Nếu các ID này có thể thay đổi, điều này có thể là một ý tưởng tồi. Nếu đó là hệ thống của riêng bạn và bạn có thể phản ứng với những thay đổi tiềm năng, đó là một ý tưởng tốt, nhưng bạn cần đảm bảo rằng các ID sẽ là duy nhất và tương đối ổn định trước khi quyết định sử dụng chúng.

+0

Cảm ơn câu trả lời, điều đó thực sự hợp lý. Tôi nghĩ nó phức tạp hơn thế. – andrei

+0

Tôi gặp phải sự cố về độ trễ với phương pháp này trước đây. Không nên đặt ID theo cách thủ công cho các thực thể Datastore, vì bạn cũng sẽ gặp sự cố "máy tính bảng nóng". Tốt nhất là để kho dữ liệu tự động tạo ID thực thể và không mã hóa dữ liệu vào chính khóa đó. Thay vào đó, hãy sử dụng Thuộc tính trong thực thể. Có thể sẽ áp dụng các quy ước quan hệ cơ sở dữ liệu vào Datastore, chẳng hạn như tự động tăng khóa chính, nhưng điều này sẽ thực sự hoàn tác việc xóa bỏ keyspace và tạo ra các vấn đề. [1] https://cloud.google.com/appengine/articles/handling_datastore_errors –

13

Bạn chỉ định id của đối tượng tại thời điểm tạo. Khi bạn xác định mô hình, bạn không đặt thuộc tính id ở đó. Vì vậy, ví dụ bạn có:

class User(ndb.Model): 
    # fields here 

Khi bạn tạo ra các mô hình, bạn có:

user = User(id='username', ...) 

Kể từ khi tên người dùng là duy nhất và bạn xác nhận đầu vào của bạn, sau đó bạn sẽ không có bất kỳ vấn đề với điều này tiếp cận.

Để biết thêm thông tin về một hàm tạo ndb Model, bạn có thể xem NDB Model Class - Constructor.

Hy vọng điều này sẽ hữu ích.

+1

cảm ơn vì đã trỏ tới trình tạo NDB – ggauravr

0

Bạn cũng có thể cung cấp ID nguyên (không nhất thiết là chuỗi) cho thực thể mô hình của mình.

class User(ndb.Model): 
... 

user = User(id=1234567890, ...) 
user.put() 
Các vấn đề liên quan