【发布时间】:2012-03-09 00:27:40
【问题描述】:
在我的代码库中,我最近遇到了团队做出的一项设计决策,其中键值对以格式化的方式存储在数据库 (Relational-mysql) 列中。有一组通用的元数据,并且该元数据的一个子集可能存在于特定记录中。对于给定的记录,其元数据子集及其值以如下格式存储在列中:
Key1:Value1\n\nKey2:Value2\n\nKey3:Value3\n\n.....
要获取给定记录 ID 的元数据,可以归结为只运行一个简单的选择,然后解析结果以在内存中填充字典。
这样做的理由如下:
- 比维护由 recordId/Key/Value 列组成的非实体化表具有更好的性能。
- 可扩展性
- 在数据库服务器上的空间上要保守一点。
我可以看到将这些配对存储在数据库列中的逻辑,但有些事情告诉我,从长远来看这可能会导致问题,并且可能不是解决“可扩展性”问题的灵丹妙药。
有人可以就这种方法可能存在的问题提供一些反馈,以及在高负载系统上存储和检索此类信息的最佳实践是什么。
谢谢
【问题讨论】:
-
如果您正在做大量的键值工作,那么关系数据库是错误的工具。为什么不使用 nosql 数据库呢?
-
嗯..系统的大部分本质上是事务性的,引入 NoSql 数据库(带有它的花里胡哨)来解决系统的这一方面几乎没有意义。
标签: database dictionary scalability key-value