以下是这个想法:我希望收到数以千计的查询,每个查询都包含一定数量的名称值对;这些从关联数组开始,因此我可以很好地控制数据会发生什么。这些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;
希望足够清楚。你看到我的意思了吗?如果我可以使用不确定数量的数据,我该如何构建表格?感谢。
编辑:我想我应该注意,显然这会设置好工作,但它是最好的表现吗?也许不吧?我不确定,让我们看看你们能想出什么!
答案 0 :(得分:0)
SQL数据库非常适合高度关系数据 - 但在这种情况下,数据不是关系数据且没有固定模式,最好使用NoSQL解决方案。有很多,我还没有充分利用它们来确定哪种方法最适合你。如果你的数据适合RAM,那么redis很棒。
答案 1 :(得分:0)
在关系数据库中存储名称/值对的常用方法称为"Entity/Attribute/Value"。您会在lot上找到discussion Stack Overflow。
这完全取决于您的应用程序想要对数据执行的操作。存储很容易 - 查询要困难得多。
如果你正在构建一个体育应用程序,你很可能有想要支持的领域概念 - 对于足球,根据所玩的比赛显示联赛位置。对于高尔夫球,请显示小鸟或老鹰的数量。您可能希望显示特定团队/玩家在一个赛季中所玩的所有游戏。
有些东西很容易在关系数据库中构建,并且在庞大的数据集上具有惊人的性能。找到有史以来得分最高的游戏,找到1998赛季的最后一场比赛,找到所有以球员x为特色的比赛 - 只要您能够构建代表这些领域概念的架构,这一切都非常合适。
从你写的内容来看,听起来你会有一定数量的运动;进入系统的数据听起来并不是特别结构化的,但您应该能够将其构建到域模型中。如果这是真的,我建议建立一个反映每项运动的领域逻辑的关系模式。
如果这不是真的 - 如果你不能事先推理域 - 关系模型是不合适的,NoSQL可能更好。但是你会遇到同样的问题 - 从名称/价值对中提取意义会很难!