5

Google Cloud Datastore là một cơ sở dữ liệu không quan hệ và được xây dựng trên khái niệm eventual consistency. Nó cũng cung cấp một phương tiện để có được sự nhất quán mạnh mẽ thông qua ancestor queries and entity groups. Tuy nhiên, tôi không nhận được sự nhất quán mạnh mẽ khi sử dụng truy vấn tổ tiên trong một số transaction.Tính nhất quán cao trong các giao dịch trong Google Cloud Datastore

Hãy xem xét điều này:

class Child(ndb.Model): 

    @classmethod 
    def create(cls): 
     child = cls() 
     child.put() 
     print Child.query().fetch() 

Child.create() 

Vì đây không sử dụng một nhóm tổ chức nào, nó hoạt động với tính nhất quán cuối cùng. Đúng như dự đoán, chúng tôi nhận được:

[] 

Hãy thử nó sử dụng các nhóm thực thể và một truy vấn tổ tiên:

class Parent(ndb.Model): 

    pass 


class Child(ndb.Model): 

    @classmethod 
    def create(cls, parent): 
     child = cls(parent=parent) 
     child.put() 
     print Child.query(ancestor=parent).fetch() 


parent = Parent().put() 
Child.create(parent) 

Ở đây chúng ta có được sự nhất quán mạnh mẽ, vì vậy sản lượng là:

[Child(key=Key('Parent', <id>, 'Child', <id>))] 

Tuy nhiên , khi chúng tôi thực hiện giao dịch vào hỗn hợp:

class Parent(ndb.Model): 

    pass 


class Child(ndb.Model): 

    @classmethod 
    @ndb.transactional 
    def create(cls, parent): 
     child = cls(parent=parent) 
     child.put() 
     print Child.query(ancestor=parent).fetch() 


parent = Parent().put() 
Child.create(parent) 

Đầu ra là:

[] 

Cho rằng bản dịch có nghĩa là để chủ yếu làm việc với các truy vấn tổ tiên (cờ chéo nhóm thậm chí tồn tại chỉ để có được xung quanh yêu cầu đó), tại sao nhất quán mạnh bị mất bên trong một giao dịch?

Trả lời

3

tài liệu của Google here làm giải quyết ví dụ cuối cùng của bạn:

Không giống với hầu hết các cơ sở dữ liệu, truy vấn và nhận được bên trong một giao dịch Cloud Datastore không thấy kết quả ghi trước bên trong đó giao dịch. Cụ thể, nếu một thực thể được sửa đổi hoặc xóa trong một giao dịch, một truy vấn hoặc trả về phiên bản gốc của thực thể kể từ khi bắt đầu giao dịch hoặc không có gì nếu thực thể không tồn tại sau đó.

Tôi không thể giải thích điều này tốt hơn các tài liệu của Google, nhưng đây là hành vi dành cho các giao dịch dựa trên cách Google thực hiện cách ly giao dịch.

+0

Như thường lệ, tôi đã đọc tài liệu của Google nhiều lần, nhưng dường như đã bỏ lỡ thông tin chính mà tôi đang tìm kiếm. Tôi nghĩ rằng nó sẽ hữu ích cho các tài liệu về truy vấn tổ tiên đề cập đến cách ly giao dịch để ngăn chặn sự nhầm lẫn/thất vọng mà tôi gặp phải. Cám ơn đã chỉ tôi hướng đi đúng! – redhotvengeance

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