gpt4 book ai didi

.net - 分层数据和 Berkeley DB

转载 作者:行者123 更新时间:2023-12-04 07:02:13 28 4
gpt4 key购买 nike

好消息!自 4.8 版以来,BerkeleyDB 具有 c# 接口(interface)。 BerkeleyDB 对我来说是一件非常有趣的事情,因为它是非 SQL 的。我知道如果有人想要存储很多键/值对,这是一个很好的工具。而且我知道“可附加”表。我不知道如何使用 BerkeleyDB 存储分层数据。一般适合这个吗?

我想做的事?我想存储 dmoz.org 数据。现在我已将所有数千个 rdfs 导入 MySQL db。但我不需要存储过程或其他复杂功能。我想使用 BerkeleyDB 作为我的在线 RSS 阅读器的数据存储。所以类别树中有提要(正如我所说的我从 dmoz 导入的类别。我有很多,以及提要 - 数百万)。而且...我忘记了饲料项目。我也想用 BerkleyDB 存储它们:-)。

看起来我必须手动实现所有关系,,,没关系......但我问的最重要的是速度。我的 BerkeleyDB 解决方案会(可以)比基于 MySQL(或任何 RDBMS)的解决方案更快吗?

最佳答案

它适合那个,但它可能比你愿意投入的工作更多。BerkeleyDB 是一个非常通用的键/值存储,所以你要做的就是说“对于键 X,存储值 Y”。稍后你可以说“给我键 X 的值”,它会给你返回 Y。这就是它从高层次上所做的一切。它具有非常强大的特性来保证重要的可靠性属性(称为 ACID,表示原子性、一致性、隔离性和持久性),并且具有出色的性能,但从程序员的角度来看,它是一个简单的映射结构。

所以是的,你可以存储树,但你需要为它们决定一个好的表示。您可以使用整数键(确保它们以大端字节顺序存储,因为 BDB 对键使用字典顺序)并且只需将结构作为包含子整数列表的值。不过,您仍然必须手动编写所有遍历算法。在不知道您对分层数据有什么要求的情况下,很难给出更具体的建议。

Speedwise,因为它所做的 Berkeley DB 可能不会变得更快(即,你不会发现有太多更快的速度,特别是如果你愿意牺牲一些 ACID 属性)。它使您几乎可以完全控制 map 界面,因此理论上您可以为您的特定用例构建高度优化的结构。但是,考虑到低级接口(interface),如果您正在实现连接、复杂的过滤器查询或任何类型的非平凡查询语言,您将不得不编写一些非常快速的代码和算法来跟上大关系数据库在那里。

如果您的数据可以通过 XML 建模(嗯,但我知道有些人喜欢它),那么有一个基于 BDB 构建的现有数据库,称为 BDB XML(也是 Sleepycat,现在是 Oracle 的一部分)。这允许您在数据库中存储任意 XML 文档,并在数据库上执行快速 XPath 和 XQuery 查询。我认为目前还没有官方的 .NET API,但我很确定我遇到了非官方的 .NET 绑定(bind)。

一般来说,除非您有一些现有解决方案不允许的非常特殊的要求(您的场景似乎不是这种情况),否则我建议您不要滚动您自己的数据库(即使是建立在 BDB 之上)除非你非常擅长高效的算法和代码优化。如果您要存储 RDF 三元组,则有专门的数据库来处理,甚至关系数据库也不是特别不适合它们。 BDB XML 仍然是一个可行的解决方案。这最终是你的选择,但如果我是你,我会选择处理更有趣的问题,而不必处理低级数据库操作(因此会在现有包上为我的实际 RDF 存储使用薄层)。

关于.net - 分层数据和 Berkeley DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1669278/

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