Google Cloud Datastore是否真的在强制其1MB实体大小限制?

Laz*_*har 3 google-app-engine mongodb nosql google-cloud-datastore google-cloud-platform

我对MongoDB和Google Cloud Datastore的其中一项微服务感到犹豫。微服务非常容易设置,并且在这两个数据库中没有其他限制是有问题的。

存储的所有文档将包含网页的精简版,其中许多本身超过1MB。这没有我们将计算并添加到文档中的属性和结果。因此,Datasore每个实体(文档)限制为1MB是有问题的(请参阅此处。)

另一方面,我有几个微服务,而且我倾向于尽可能简单地开始。就托管数据库而言,数据存储非常理想:可自动扩展且API很棒。因此,除了这个实体大小限制,这是我的首选。

对于Google数据存储区用户,他们实际上是在执行实体大小限制吗?如果是,您是否知道有任何计划来提高此限制?

gae*_*fan 5

是的,Google确实实施了实体大小限制。我不知道有任何增加上限的建议。

您可以利用的数据存储的一项功能是可以自动压缩存储在实体中的数据。您将使用压缩BlobProperty此处PickleProperty所述。根据数据,您可能可以通过这种方式在实体中存储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")
Run Code Online (Sandbox Code Playgroud)

然后,实体按如下方式使用它:

class MyEntity(ndb.Model):
    data = UTF8BlobProperty()
Run Code Online (Sandbox Code Playgroud)

之后,您可以像使用其他任何属性一样使用它。我一直想修改它,以便当压缩数据太大时它会自动将数据存储在Google Cloud Storage中,但是还没有解决这个问题。