繁体   English   中英

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

[英]Is Google Cloud Datastore actually enforcing its 1MB entity size limit?

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

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

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

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

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

您可以利用的数据存储的一项功能是可以自动压缩存储在实体中的数据。 您将按此处所述使用压缩的BlobPropertyPickleProperty 根据数据,您可能可以通过这种方式在实体中存储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中,但是还没有解决这个问题。

您可能需要研究Google的Cloud Firestore Cloud Datastore一样,它是一个NoSQL数据库,但它遵循文档模型。 Cloud Datastore具有实体的位置 Cloud Firestore具有文档的位置 Firestore文档和数据存储实体都具有相同的1MB限制,并且两个数据库都支持分层模型。 使用Firestore的分层模型,可以将文档分组为集合,而Datastore可以将其实体分组为

但是使用Firestore的分层模型,您可以在不影响1MB限制的情况下将集合嵌套在文档中(相反,您不能在数据存储实体中嵌入一种,您可以做的最好的事情是将一个实体嵌入另一个实体中,但会造成1MB的限制)并使用该机制,您可以根据使用情况解决1MB的限制。

在这种情况下,数据存储可能不是您的最佳选择,但另一方面,请查看Google Cloud Storage ,它可以在其中存储更大的对象。 默认情况下,最简单的上载方法最多可存储5 MB文件。 使用可恢复的上传方法,您可以存储超过5 MB的限制,最大存储量为TB。

数据存储区以及MongoDB都非常适合JSON数据格式,但是在您的示例网页中,在理想情况下,它更可能是HTML或一组文件,当然,如果您不打算进行网页归档或预存储,保存前进行处理。

无论如何,我认为如果您没有纯JSON数据,那么Datastore以及MongoDB都不是您理想的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM