mongodb - Google Cloud Datastore 是否真的在执行其 1MB 的实体大小限制?

标签 mongodb google-app-engine nosql google-cloud-datastore google-cloud-platform

我正在为我的一项微服务在 MongoDB 和 Google Cloud Datastore 之间犹豫不决。微服务非常容易设置,并且任何一个数据库中的其他限制都没有问题。

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

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

对于 Google Datastore 用户,他们是否真的在执行实体大小限制?如果是,您是否知道任何提高此限制的计划?

最佳答案

是的,Google 确实强制执行实体大小限制。我不知道有任何增加限制的建议。

您可以利用数据存储的一个功能是可以自动压缩存储在实体中的数据。您将使用压缩的 BlobPropertyPickleProperty,如 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/

相关文章:

mongodb - 在 MongoDB 中拥有大量集合(需要模式设计建议)

session - node.js sessionStore 显示所有 session 的相同数据

php - 如何在MongoDB中选择一个字段大于另一个字段的文档?

java - 使用 appengine 时如何修复 "The server encountered an error and could not complete your request"?

python - GAE 上的 Flask - 连接到 Google API - 无法使用 JSON 文件

nosql - EclipseLink NoSQL 限制、支持、 future

python - 使用 Django 和 Titan 为 nosql 创建 REST 的最佳方法是什么?

node.js - 每日特定时间自动运行功能

javascript - Mongodb mapreduce 遍历对象的键值对

android - 我应该在我的 Android 应用程序中使用基于登录的用户身份验证吗