gpt4 book ai didi

counter - 如何在 Berkeley DB 中对 Map> 建模

转载 作者:行者123 更新时间:2023-12-02 04:40:25 30 4
gpt4 key购买 nike

我正在考虑使用 Berkeley DB作为高度并发的移动应用程序后端的一部分。对于我的应用程序,使用 Queue对于他们的记录级别锁定将是理想的。但是,如标题中所述,我需要查询和更新概念建模的数据,如 Map<Number,Map<Number,Number>> .

外键将引用一个唯一的 Item , 而内键将引用其中一个 Item的指标。内部值将是一个我需要自动递增的计数器,可能非常频繁。因此,为什么记录级锁定在这里是一个理想的特性。理想情况下,记录级别类似于 Item数据模型中的级别。

数据将以以下两种方式使用:

  1. 添加<Number,Map<Number,Number>>入口

    • 相对不常见
  2. 在给定 Item 的情况下,在数据库中以原子方式批量递增 ~15 个指标id 和指标 id 列表

    然后,得到 Item的度量图

    • 非常频繁

内部Map应该能够增长,但不会超过 200 个条目。

就是这样。

你觉得Berkeley DB适合这个应用吗?

更新:

显然,我的数据架构不够清晰,因此我将进一步分解。

Item , 有很多指标,每个指标都有一个计数器,即一对一(多对一)即 <Number,Map<Number,Number>>

但我有很多Item的,所以我需要的是 Map<Number,Map<Number,Number>>

最佳答案

我认为 Berkeley DB 是一个不错的选择,但有一些关于如何选择数据布局的警告。但是,您可能需要考虑其他 key-value stores也是 - 例如,LMDB 应该比 BDB 更容易上手。

乍一看,您系统中的一条记录(“键/值”中的“值”)似乎是您内心的 Map<Number, Number> . queue访问方法(或 btree,FWIW)提供外部 Map<Number, Record> .

Berkeley DB 没有提供太多(实际上没有)帮助访问记录中的内容。因此,您仍然必须以某种允许随机访问和修改的方式表示您的内部 Map它的内容。取决于第一个数字有多大 Map<Number, Number> , 你可以做一个简单的 C 风格数组。您可以使用 JSON 对象或 protobuf,或者您能想到的任何其他对象。

与您提到的内部 map 大小的 200 个左右的条目相比,只有当您在外部 map 中有很多条目时,这种布局才有意义>。记录级锁定适用于整个内部 Map,因为那是你的记录。

另一种技术是从前两个 Number 中创建一个复合键在你的模式中。即 Map<NumberX, Map<NumberY, NumberZ>成为一个键为 NumberX_NumberY 的数据库和值(value)NumberZ .这将使您能够快速随机访问内部 map 中的任何特定条目,但您必须使用游标来检索整个内部 map 中的所有条目。

关于counter - 如何在 Berkeley DB 中对 Map<Number,Map<Number,Number>> 建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38027687/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com