我正在为我的一项微服务在 MongoDB 和 Google Cloud Datastore 之间犹豫不决。微服务非常容易设置,并且任何一个数据库中的其他限制都没有问题。
所有存储的文档都将包含网页的精简版,其中许多文档本身就超过 1MB。那没有我们将计算并添加到文档中的属性和结果。 因此,Datasore 对每个实体(文档)1MB 的限制是有问题的(see here。)
另一方面,我有几个微服务,我倾向于尽可能简单地开始。就托管数据库而言,Datastore 是理想之选:自动扩展且 API 很棒。所以除了这个实体大小限制,这是我的第一选择。
对于 Google Datastore 用户,他们是否真的在执行实体大小限制?如果是,您是否知道任何提高此限制的计划?
最佳答案
是的,Google 确实强制执行实体大小限制。我不知道有任何增加限制的建议。
您可以利用数据存储的一个功能是可以自动压缩存储在实体中的数据。您将使用压缩的 BlobProperty
或 PickleProperty
,如 here 所述.根据数据,您可以通过这种方式在实体中存储 3MB。
我会为您提供更多关于我执行类似操作的详细信息。一个 BlobProperty 需要存储编码文本,不能存储 unicode,所以我制作了自己的属性来自动编码和解码:
class UTF8BlobProperty(ndb.BlobProperty):
def __init__(self):
super(UTF8BlobProperty, self).__init__(default="", compressed=True)
def _validate(self, text):
if not isinstance(text, basestring):
raise TypeError("Expected a basestring, got %s" % text)
def _to_base_type(self, text):
return text.encode("utf-8")
def _from_base_type(self, text):
return text.decode("utf-8")
一个实体然后像这样使用它:
class MyEntity(ndb.Model):
data = UTF8BlobProperty()
之后,您只需像使用任何其他属性一样使用它。我一直想对此进行修改,以便在压缩数据过大时自动将数据存储在 Google Cloud Storage 中,但还没有开始需要它。
关于mongodb - Google Cloud Datastore 是否真的在执行其 1MB 的实体大小限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46892479/