gpt4 book ai didi

database - 快速只读嵌入式 "database"?

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:19 26 4
gpt4 key购买 nike

我希望将一些信息分发到不同的机器上,以便在没有任何网络开销的情况下实现高效和极快的访问。数据存在于关系模式中,实体之间的关系是“加入”的要求,但根本不是写入数据库的要求(它会离线生成)。

我非常相信 SQLite 会提供性能,但 RDMBS 似乎在基本层面上不合适:由于索引查找的成本,连接非常昂贵,而且在我的只读上下文中,这是不必要的开销,实体可以以文件偏移量的形式存储对彼此的直接引用。这样,索引查找切换为文件查找。

我在这里有哪些选择?数据库似乎并没有真正描述我正在寻找的东西。我知道 Neo4j,但我无法在我的应用程序中嵌入 Java。

TIA!

编辑,回复评论:

  • 数据的大小将达到 1gb,而我使用的是 PHP,因此将数据保存在内存中并不是一个真正的选择。我将依靠操作系统缓冲区缓存来避免不断地访问磁盘。
  • 示例是一个包含 15 个混合类型字段的产品表,以及一个查询以列出具有特定品牌的产品,加入类别表。
  • 解决方案必须是某种平面文件。我想知道是否已经有一些软件可以满足我的需求。

@马克威尔金斯:

性能问题是衡量出来的。本质上,在我的情况下,用 5 毫秒 CPU 绑定(bind)调用 SQLite 替换 2 毫秒 IO 绑定(bind)查询到 Memcache 是 Not Acceptable ......例如,类别表有 500 条记录,包含父类别和子类别。以下查询耗时约 8 毫秒,没有磁盘 IO:SELECT 1 FROM categories a INNER JOIN categories B on b.id = a.parent_id。一些更简单的无连接查询非常快。

最佳答案

关于您需要的查询类型,我可能并不完全清楚您的目标。但是关于将文件偏移量存储到其他数据的部分似乎是一个非常脆弱的解决方案,难以维护和调试。可能有一些工具可以帮助它,但我怀疑你最终会自己编写大部分内容。如果以后需要其他人来调试并弄清楚自己开发的文件格式,工作量会更大。

但是,我的第一个想法是想知道所描述的性能问题是此时估计的还是实际测量的。您是否使用关系格式的数据运行测试以查看它实际上有多快?确实,连接几乎总是会涉及更多文件读取(如您所述进行二进制搜索,然后获取关联的记录信息,然后查找该记录)。这可能需要 4 或 5 或更多的磁盘操作......首先。但是在类别表(来自 OP)中,如果它经常被命中,它最终可能会被缓存。这完全是我的猜测,但在许多情况下类别的数量相对较少。如果是这种情况,整个类别表及其索引可能会被操作系统缓存在内存中,从而实现非常快速的连接。

如果性能确实是一个真正的问题,另一种可能性可能是 denormalize the data .在类别示例中,只需复制类别值/名称并将其与每个产品记录一起存储。数据库大小会因此增加,但您仍然可以使用嵌入式数据库 ( there are a number of possibilities )。如果做得明智,它仍然可以得到相当好的维护,并提供通过一次查找/查找和一次读取来读取完整对象的能力。

关于database - 快速只读嵌入式 "database"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8567835/

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