【发布时间】:2010-05-01 06:17:03
【问题描述】:
问题是设计问题之一。我正在收集大量具有大量键值对的性能数据。 /proc/cpuinfo、/proc/meminfo/、/proc/loadavg 中的几乎所有内容,以及来自数百台主机的一堆其他内容。现在,我只需要在我的 UI 中显示最新的数据块。我可能最终会对收集的数据进行一些分析,以找出未来的性能问题,但这是一个新应用程序,所以我不确定我到底在寻找什么性能方面的。
我可以在数据库中构造数据——我收集的每个键都有一个列。该表最终将是 O(100) 列宽,放入数据库会很痛苦,如果我开始收集新的统计信息,我将不得不添加新列。但仅使用 SQL 就可以轻松对数据进行排序/分析。
或者我可以将我的非结构化数据块转储到表中。可能是三列——主机 ID、时间戳和我的数组的序列化版本,可能在 TEXT 字段中使用 JSON。
我应该怎么做?如果我采用非结构化方法,我会后悔吗?在进行分析时,我是否应该只转换我感兴趣的字段并创建一个新的、更结构化的表?我在这里缺少哪些权衡?
【问题讨论】:
-
为什么不是一个有四列的表:host_id、key、value、timestamp?
-
我承认我什至没有考虑过 EAV 模式——我对它有一些经验,我发现做它经常需要的 30 路连接是,ahem,对性能有害。并试图避免 30 路连接会导致心理扭曲和丑陋的代码......
-
我问了一个有点相关的问题:stackoverflow.com/questions/2672178/…
标签: database database-design serialization structure