【问题标题】:How to embed large arrays in Google Cloud Datastore without reaching the 1MB size limit?如何在不达到 1MB 大小限制的情况下将大型数组嵌入 Google Cloud Datastore?
【发布时间】:2017-11-16 16:36:53
【问题描述】:

我的项目主要使用谷歌的两种不同工具:

  1. Natural Language API,用于分析和保存数百个文档的实体语法
  2. Datastore 用于存储每个文档及其从 Google NL API 检索到的数据

我绝对必须保存令牌和实体,否则我每次处理给定文档时都必须调用 Google NL API。

但是,当文档超过一千字时(即非常频繁),我无法将文档保存在 Google 数据存储区中。

我收到 400 错误消息 entity is too big。大约 2 到 5MB,具体取决于主题。

当我尝试 Blob 时,我也有 The value of property 'tokens' is longer than 1048487 bytes

我尝试序列化数组并将其转换为 Blob,但结果相同。

有什么方法可以在不迁移到 MongoDB 的情况下完成这项工作?

【问题讨论】:

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


    【解决方案1】:

    我可以建议你 3 个选项:

    1. 使用压缩。 (战术)通常文本数据被很好地压缩。所以你可能开始适应 1MB 的限制

    2. 使用分片。将数据拆分为多个实体并一起存储/读取它们。根据需要加入阅读。

    3. 迁移到 Blob 存储。例如https://cloud.google.com/storage/

    还有其他选项/解决方案,但这 3 个可能最容易实现。

    【讨论】:

    • 压缩已经是我所做的,它有时可能会起作用,但是一旦文档的字数(很多)更高,它就会再次失败。我认为分片太复杂了,其中一些令牌或实体数组本身就超过 1MiB。 Blob 存储是可能的,但只是为了检索完整文档(数据存储的包含标题、元数据等的文档;然后调用 Google Cloud Storage 以获取令牌和实体的两个列表)需要大量的体操和网络调用。
    • 我不明白分片有多难。基本上只有 2 个包装函数 - 1 个用于写入,1 个用于读取。也许 30-50 行代码?
    猜你喜欢
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 2015-12-30
    • 2017-07-12
    • 2020-07-22
    相关资源
    最近更新 更多