构建数据库以处理未知的名称/值对

Posted

技术标签:

【中文标题】构建数据库以处理未知的名称/值对【英文标题】:Structuring a database to handle unknown name/value pairs 【发布时间】:2012-06-15 22:55:49 【问题描述】:

想法如下:我预计会收到数千个查询,每个查询都包含一定数量的名称值对;这些从关联数组开始,因此我可以很好地控制数据可能发生的情况。这些 NVP 因来源而异。例如,如果源是“A”,我可以接收数组(在 JSON 中以便于解释):'Key1':'test1','key2':'test2' 但如果源是“B”,我可以接收 'DifferentKey1':'test1','DifferentKey2':'test2' 我正在选择哪些键我想要存储在我的数据库中,所以在这种情况下,我只想从源 B 的数组中选择 DifferentKey1,然后丢弃其余的。

我的主要问题是这些数组在技术上可能是完全不相关的内容。它们有一个非常普遍的关联(它们都是包含统计数据的数组),但它们非常不同(因为来源不同,即不同的游戏/运动)。

我在想 SQL:存储一个充满游戏及其各自 ID 的表将是链接一般 NVP 字符串的好方法。例如:

Games table:
| id | name |
-------------
  1    golf
  2    soccer

NVP table
| id | game_id | nvp
   1      1      team1score=87;team2score=94;team3score=73;
   2      2      team1score=2;team2score=1;extratime=200;numyellowcards=4;

希望这已经足够清楚了。你明白我的意思吗?如果我可能使用的数据量不确定,我该如何构建表格?谢谢。

编辑:我想我应该注意,显然这种设置会起作用,但是它是最佳性能吗?也许不吧?不太清楚,看看你们能想出什么办法!

【问题讨论】:

看起来您重新发明了键值存储...! 那你有什么建议?这是一种普遍接受的做事方式吗?我认为可能有更好的方法。 【参考方案1】:

SQL 数据库非常适合用于高度相关的数据 - 但在这种数据不是关系且没有固定架构的情况下,您最好使用 NoSQL 解决方案。有很多,我还没有充分使用它们来确定什么最适合你。如果您的数据可以放入 RAM,那么 redis 就很棒。

【讨论】:

这种类型的解决方案会比我建议的更高效吗?有没有其他方法可以将这些数据关联起来? 在性能方面 - 是的,NoSQL 解决方案应该非常快。处理大量数据比 SQL 数据库更快,但这并不意味着 SQL 数据库会很慢。但是,这可能不是表示数据的最佳方式,很难知道在不更好地了解您的领域的情况下使您的数据更具相关性是否是一件好事。我建议您使用 NoSQL 数据库试一试,看看它是否适合您的应用程序。 一般来说,善于处理这种松散模式的实体是 NoSQL 数据库的强项。 感谢大家的帮助,我会研究一下 NoSQL。【参考方案2】:

在关系数据库中存储名称/值对的常用方法称为"Entity/Attribute/Value"。您会在 Stack Overflow 上找到 lot 或 discussion。

这完全取决于您的应用程序想要对数据做什么。存储很容易 - 查询要困难得多。

如果您正在构建一个体育应用程序,您可能有想要支持的领域概念 - 对于足球,根据所玩的比赛显示联赛排名。对于高尔夫,显示小鸟或老鹰的数量。您可能希望显示特定球队/球员在一个赛季中参加的所有比赛。

有些东西很容易在关系数据库中构建,并且在庞大的数据集上具有惊人的性能。找到有史以来得分最高的游戏,找到 1998 赛季的最后一场比赛,找到所有以玩家 x 为主角的游戏——只要你能构建一个代表这些领域概念的模式,所有这些都非常合适。

从您写的内容来看,听起来您将进行固定数量的运动; 传入到您系统的数据听起来好像不是特别结构化,但您应该能够将其结构化为域模型。如果这是真的,我建议构建一个反映每项运动的领域逻辑的关系模式。

如果不是这样——如果你不能提前对领域进行推理——关系模型不合适,而 NoSQL 可能更好。但是您会遇到同样的问题 - 从名称/值对中提取含义会很困难!

【讨论】:

以上是关于构建数据库以处理未知的名称/值对的主要内容,如果未能解决你的问题,请参考以下文章

将键值对数据批量加载到 HBASE

HDF5 中的嵌套复合数据类型

在 CodeIgniter 中密钥未知时获取 post 值

在 JavaScript 中的 HTML 表格行中构建一个由单元格的名称/值对组成的对象

C# - 将 json 格式的数据解析为嵌套的哈希表

ArangoDB介绍——未知架构和底层原理