像IBM的许多眼睛,旋转等网站存储各种数据并允许其用户可视化它们。他们如何设计他们的桌子?例如,如果您要将data.gov站点中的数据保存到数据库中并允许用户对其执行操作,那么您将如何设计表格?结构需要足够通用以容纳任何类型的数据。例如,data.gov有大量数据,其中一些比其他数据更复杂。
答案 0 :(得分:2)
关键问题在于,对数据进行简单的检索是重要的还是聚合和搜索数据。
即//你在使用FOR的数据是什么?
如果它只是数据(即//它只是一些随机文本/二进制文件),我根本不会打扰数据库。只需将它打成一系列文件,剥离编码并使用grep / sed / awk / LISP在没有任何标签的情况下移动它。数据仅对搜索/检索操作非常有用,而不是深度趋势。
如果它是单行或数据元素(如Stack Overflow问题或注释),我会考虑NOSQL模式(基本上只是查找)或OODB。
如果这是重要的关系,我会将其建模为带有边和节点的图形。节点包含数据,边包含关系。我很想在那时使用基于磁盘的指针手动实现它。
如果是重要的数据集(即//一起考虑数据的特征),我会想到关键分组的长期和艰难,并以这种方式设计关系数据库表。如果设计需要更改以适应新的信息和集合,那么当我了解新的需求时,我会操纵表格结构以更好地建模。
可以使用多维格式(使用(时间,空间,标签)作为键和(属性集,可聚合特征,数据)作为有效负载来索引大量数据。属性映射到维度,可以使用可聚合特征(计数,总和,最大/最小,平均值,标准等等)“累计”。
你的问题有点模糊,但没有原因,这就是为什么这对于弄清楚设计至关重要。
答案 1 :(得分:1)
回答问题最简单的方法是使用字符串字典。它是NOSQL社区中一个受欢迎的结构,也是灵活的python和lua。您可以通过添加时间维度等来为您的域专门化 - 即,超级可以做到这一点。
任何数据模型都可以序列化为字符串字典。我不知道具体细节,但MySql有一个BDB后端。 BDB的核心数据结构是字符串字符串。
p.s。,我也是关系狂热者的一半,所以如果数据很重要,我会建立关系模型:P
答案 2 :(得分:0)
我的帮助不大,但是这篇文章How Friendfeed uses MySQL to store schemaless data可能会有所帮助。
答案 3 :(得分:0)
您是否考虑过使用像couchDB这样的无架构数据库?
答案 4 :(得分:0)
Drupal CMS模块Content Construction Kit中存在此类系统的一个非常好的示例,当与Drupal Views模块集成时,它是一个很好的演示,不仅可以管理具有动态结构的数据库,以及如何使用户可以访问内容,这与存储数据本身一样重要。
当我意识到这两个系统的能力有多大时,我感到很震惊。 Drupal和这些模块是开源的,因此您可以根据需要分析它,以了解它背后的概念。
答案 5 :(得分:0)
如果您无法提前确定确切的数据模型,并且还需要处理复杂的数据,我实际上认为表不是最好的基础抽象。作为基础模型的图形更适合这些要求。您可以查看图表数据库(AllegroGraph,Neo4j,VertexDB)或使用RDF(这也是标准化图表数据模型AllegroGraph和Neo4j)。 RDF使您的数据减少对特定工具集的依赖。一些好的起点:
- 免责声明:我在Neo4j团队中