我有一个应用程序,用户可以在其中定义自己的数据集(字段,字段类型等),然后存储他们的数据......与创建和管理他们自己的表非常相似。
从自定义查询角度和存储角度来看,尝试将其设置为类似MySQL的东西时,这样做似乎会出现问题。我不希望最终得到数千个表,甚至不需要管理这么多不同的数据库。
有人告诉我,NoSQL是基于远离疯狂复杂查询的灵活性来研究的。
最终结果是用户将能够查询这些数据集以构建图形。像http://redis.io之类的东西会为我完成这项任务吗?
如果没有,是否有人就支持此任务的最佳选择提出建议?
谢谢!
答案 0 :(得分:0)
您需要详细考虑您的数据模型和所需的查询以做出此决定 - 各种NoSQL技术中的每一种都具有略微不同的数据模型和功能集。
像Cassandra这样的键值数据库可能会支持即时字段定义,但在字段输入方面不会提供太多支持。您可以存储原始字节值并覆盖您自己的类型系统,但是您不会从数据库中获得强制类型的支持。
NoSQL数据库通常不支持复杂查询(没有连接等),因此您必须使用简单查询(密钥查找)或非规范化来支持特定查询。
如果您正在使用图表,您是否考虑过RDF数据库(三重商店)?这些也允许很大的灵活性,但不是基于表格的(关系)。它们通常支持SPARQL查询语言。请参阅http://answers.semanticweb.com/网站。
答案 1 :(得分:0)
根据您的描述,您需要一个面向文档的数据库或一个能够知道(甚至索引)值的键/值存储。
Riak适合该模型,因为它是一个键/值存储,您不必为这些值预定义结构+它具有次要指标,其中每个{key,value}对保持不变,您可以添加自定义索引。用Riak的话来说,你有能力:tag a Riak object with some index metadata, and later retrieve the object by querying the index, rather than the object's primary key
符合您要解决的问题的描述。
以下是Basho博客(简单curl HTTP请求)的示例:
curl -X POST \
-H 'x-riak-index-twitter_bin: rustyio' \
-H 'x-riak-index-email_bin: rusty@basho.com' \
-d '...user data...' \
http://localhost:8098/buckets/users/keys/rustyk
说,在...user data...
键下插入rustyk
,或者顺便标记(读index
)twitter
“rustyio”和email
“rusty@basho.com”(_bin,只是意味着这些标记是二进制的)
现在只需创建“索引”即可读取密钥,您可以简单地:
curl localhost:8098/buckets/users/index/twitter_bin/rustyio
返回:
{"keys":["rustyk"]}
可用于检索...user data...