【发布时间】:2017-03-15 17:31:43
【问题描述】:
这是我面临的问题
我有一个名为 GAMELOG 的表(可以是 SQL 表或 NoSQL 列族),如下所示:
ID INT, 请求日期, 请求 VARCHAR, 答复日期, 响应 VARCHAR
REQUESTMESSAGE 和 RESPONSEMESSAGE 列采用 JSON 格式。 例如,REQUESTMESSAGE 中的特定值是:
{
"name" : "John",
"specialty" : "Wizard",
"joinDate" : "17-Feb-1988"
}
对于响应是:
{
"name" : "John Doe",
"specialty" : "Wizard",
"joinDate" : "17-Feb-1988",
"level" : 89,
"lastSkillLearned" : "Megindo"
}
现在,我的表中的数据已经变得非常大(大约十亿行,几 TB 的硬盘空间)
我想要做的是查询包含“name”的 JSON 属性的行,该属性在 REQUESTMESSAGE 中的值为“John”
我对 SQL 数据库的了解,以及我之前使用过的 Oracle,我必须将 REQUESTMESSAGE 和 RESPONSEMESSAGE 设为 CLOB,并使用 LIKE 进行查询,即
SELECT * FROM GAMELOG WHERE REQUESTMESSAGE LIKE '%"name" : "John"%';
但是,结果非常缓慢和痛苦。
现在,我搬到 Cassandra,但我不知道如何正确查询它,我还没有使用 Apache Hadoop 来获取数据,我打算稍后使用它来获取数据。
我的问题是,是否有数据库产品支持查询以在表/列族中选择 JSON 格式的 JSON 属性?据我所知,MongoDB 以 JSON 格式存储文档,但这意味着我的所有列族都将存储为 JSON,即
{
"ID" : 1,
"REQUESTMESSAGE" : "{
"name" : "John",
"specialty" : "Wizard",
"joinDate" : "17-Feb-1988"
}",
"REQUESTDATE" : "17-Feb-1967"
"RESPONSEMESSAGE" : "{
"name" : "John Doe",
"specialty" : "Wizard",
"joinDate" : "17-Feb-1988",
"level" : 89,
"lastSkillLearned" : "Megindo"
}",
"RESPONSEDATE" : "17-Feb-1967"
}
我仍然无法在 REQUESTMESSAGE 列中获取 JSON 属性(如果我错了,请纠正我)
非常感谢
【问题讨论】: