gpt4 book ai didi

database-design - Citadel 如何仅使用 BerkeleyDB 键/值存储来构建它的数据?

转载 作者:行者123 更新时间:2023-12-04 07:22:38 25 4
gpt4 key购买 nike

我正在阅读 Citadel文档及其 mented that it used BerkeleyDB来存储数据。由于 BerkeleyDB 是一个键/值存储,我想知道他们如何使用如此简单的数据模型来管理所有数据关系(因为 Citadel 做了很多事情)。

CREATE TABLE citadel (
key LONGBLOB INDEX,
data LONGBLOB
);

这让我有机会最终看到使用 NoSQL 数据库建模的完整应用程序。然而,我找不到任何关于他们如何做到这一点的文档。

那么,Citadel 如何仅使用 BerkeleyDB 键/值存储来构造它的数据?

  • 它如何将电子邮件映射到用户?
  • 用户与其他用户有什么关系?
  • 联系人是如何存储的?
  • 如何找到相关的电子邮件回复?
  • 如何将电子邮件标记为已查看?

这个 list 还在继续……

最佳答案

有相当多的 NoSQL 数据库,就其原始形式而言,可与文件系统相媲美。给定一个键(=路径),你会得到一个数据 block (=文件内容)。其余的大致归结为调整和额外功能;

  • 很多(数十亿和数十亿)键在一个命名空间中? (HBase、Riak、BerkeleyDB……)
  • 支持多 TB 值? (Amazon S3)或针对许多较小的(Zookeeper)进行调整
  • 不透明的值?有些数据库不查看它们(HBase、BerkeleyDB),有些数据库会查看它们(CouchDB)。

目前似乎最流行的方法是进行键扫描(HBase、Cassandra、CouchDB,我相信还有 BerkeleyDB),您可以在其中请求您感兴趣的键间隔,例如。 “从 foo@bar:emails:folderName:00000000foo@bar:emails:folderName:999999999”。这通常会返回在两者之间的 ASCIIbetic 间隔中的键和/或值的列表。因此,您可以在平面命名空间中模拟类似文件的层次结构。

下一个问题是并发。 非常简短,大多数 NoSQL 数据库放弃 ACID 以支持可扩展性和/或可用性。查看 CAP Theorem了解更多详情。

总而言之,在这么短的篇幅中很难做到主题公正,所以我真的建议你自己研究一下。

挑选一些开源项目分开(OpenTSDB 以一种有趣但明显的方式做事)。或者自己在 NoSQL 上构建一些东西。

关于database-design - Citadel 如何仅使用 BerkeleyDB 键/值存储来构建它的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12355343/

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