【问题标题】:How Datastore write operation is calculated(total number of write)for simple and complex query?简单查询和复杂查询如何计算 Datastore 写入操作(写入总数)?
【发布时间】:2014-08-22 20:35:05
【问题描述】:

我正在开发一个带有数据存储的应用引擎项目(创建我们的数据库),

根据此link 中给出的信息,列出了针对不同情况(插入、更新和删除)的读写操作总数,但我很困惑如何为修改索引和复合索引计算写入操作。

我们有以下情况,我们必须计算写操作的次数

1 >> 数据存储区查询需要基于单一属性过滤 无复杂查询[no index defined in datastore-indexes.xml file]

例如“SELECT * FROM MESSAGE AS MESSAGE ORDER BY timestamp desc"

2>> 数据存储区查询需要基于单个属性的过滤,没有复杂的查询[index defined on one property in datastore-indexes.xml file ] 例如“SELECT * FROM MESSAGE AS MESSAGE ORDER BY timestamp desc"

3>> 数据存储区查询需要基于复杂查询进行过滤[index defined for complex query defind in datastore-indexes.xml file ] 根据示例““SELECT * FROM MESSAGE AS MESSAGE WHERE req_id="xyz123" ORDER BY timestamp desc"

注意::例如,我使用了这个语句“SELECT * FROM MESSAGE AS MESSAGE ORDER BY timestamp desc”。这个 jpql 查询发出 get(1 read operation) http 请求,以便从数据存储中检索数据。

问题

对于上述情况,New Entity Put 写入操作将如何 计数?[ 新实体放置“ 2 次写入 + 每个索引属性 2 次写入 值 + 每个复合索引值 1 次写入"]

提前谢谢!!!!

【问题讨论】:

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


    【解决方案1】:

    我的猜测是

    1. 2 + 2 * n(索引属性的数量:至少1个,时间戳)+ 0
    2. 2 + 2 * n(索引属性的数量:至少1个,时间戳)+ 1(错误。0是正确的)
    3. 2 + 2 * n(索引属性的数量:至少2个,req_id,时间戳)+ 1

    【讨论】:

    • 艾德戴维森的回答是对的。 index.yaml 中的单个索引在创建复合索引时出错。我以前从未测试过它。 :)
    【解决方案2】:

    对于具有单值属性的实体,编写新实体需要以下写入:

    • 1 代表实体本身
    • EntitiesByKind 索引为 1
    • 每个索引属性 2 个
    • 每个复合索引 1 个

    所以对于你的例子:

    1. 1 + 1 + 2*(索引属性的数量)
    2. 这其实和#1一样;无需在 datastore-indexes.xml 中定义单一属性索引,因为它们会自动包含在内。
    3. 1 + 1 + 2*(索引属性数)+ 1

    这里是 more information 关于数据存储区写入成本的信息。

    【讨论】:

    • 非常感谢您澄清我的疑问!!!您提供的链接上提供的信息真的很有帮助!!!!
    • 我对索引属性的数量有疑问,说我有 5 个属性自动索引,而不是认为索引属性意味着 1. 1+1+2*(5)=12 写入计数???
    • 没错,具有五个索引属性(并且没有复合索引)的实体将花费 12 次写入。请注意,当您修改实体时,只有更改的索引才算作写入。
    猜你喜欢
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    相关资源
    最近更新 更多