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?
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