【发布时间】:2015-03-07 10:29:42
【问题描述】:
我正在开发管理由组件组成的对象的系统。 从性能的角度来看,将它们存储在 SQLITE 数据库中的最佳方法是什么?如果有 20 种组件类型 每个组件都是一个 1-10Kb 大小的 blob。通常每个对象由 4-6 个不同的组件组成。
我可以看到两个选项:
- 将其实现为一个具有键和 20 个 blob 列的表
- 使用 20 个带有键和单个 blob 列的表
我将对数据库进行的唯一查询是:通过 id 获取组件数据、写入数据和删除数据。
PS:对象类看起来像这样:
class Entity
{
Component *components[20];
}
通常组件数组有 4-6 个非空指针
【问题讨论】:
-
1) 最简单的找出方法是针对您的工作负载对两者进行基准测试。 2)在进行基准测试时,请确保您知道您对延迟与吞吐量的关心程度。 3) 性能问题几乎总是特定于工作负载。
-
是的,但我认为我的问题更多是关于 sqlite 以及它在内部存储多个字段的方式。如果列中 75% 的值是空的,是否有效?
-
在这种情况下,您可能应该 a) 重新表述您的问题以询问有关 sqlite 存储结构的问题,也许 b) 通过指向源代码中您查看但不理解的地方来展示您的努力。
-
我认为答案显然仅取决于 sqlite 内部结构。我问这个问题是因为要回答这个问题要么需要付出巨大的努力来分析 sqlite 资源,要么需要大量使用 sqlite 数据库的经验
-
让我试着解释一下,对吗?您有每个包含一组组件的对象。 恰好有 20 种不同的可能 ComponentType。 (当您说“ComponentType”时,是否意味着有多个不同的组件都是 ComponentType1?如果是这样,每个 Object 的 ComponentType1 版本是否与每个其他 Object 的 ComponentType1 版本不同?) 每个 Object可以选择在 20 个 ComponentTypes 中的每一个中使用零或一个,并且这个数字 20 是固定的并且永远不会改变?如果您可以将其表达为类并举例说明,那会有所帮助。
标签: sql sqlite key-value-store