【发布时间】:2011-12-19 21:32:36
【问题描述】:
我希望将一些信息分发到不同的机器,以便在没有任何网络开销的情况下进行高效且极快的访问。数据存在于关系模式中,需要“加入”实体之间的关系,但根本不需要写入数据库(它将离线生成)。
我对 SQLite 能够提供性能非常有信心,但 RDMBS 似乎从根本上不适合:由于索引查找的成本,连接非常昂贵,而且在我的只读上下文中,这是不必要的开销,其中实体可以以文件偏移量的形式存储彼此的直接引用。这样,索引查找切换为文件查找。
我在这里有什么选择?数据库似乎并没有真正描述我在寻找什么。我知道 Neo4j,但我无法在我的应用程序中嵌入 Java。
TIA!
编辑,回答 cmets:
- 数据最大为 1gb,而且我使用的是 PHP,因此将数据保存在内存中并不是一个真正的选择。我将依靠操作系统缓冲区缓存来避免不断地访问磁盘。
- 示例是包含 15 个混合类型字段的 Product 表,以及用于列出具有特定品牌的产品的查询,并加入 Category 表。
- 解决方案必须是某种平面文件。我想知道是否已经有一些软件可以满足我的需求。
@马克威尔金斯:
衡量性能问题。本质上,在我的情况下,用对 SQLite 的 5 毫秒 CPU 绑定调用替换对 Memcache 的 2 毫秒 IO 绑定查询是不可接受的……例如,类别表有 500 条记录,包含父类别和子类别。以下查询大约需要 8 毫秒,没有磁盘 IO:SELECT 1 FROM categories a INNER JOIN categories B on b.id = a.parent_id。一些更简单、无连接的查询非常快。
【问题讨论】:
-
你是说这是一个关系模式,你需要加入关系,但你不想使用关系数据库?为什么不使用平面文件?
-
举例说明你的“数据库”的大小。
标签: database performance sqlite lookup flat-file