NoSQL一次写入,自动时间戳索引

时间:2016-05-03 11:42:24

标签: database nosql

我正在寻找将数据存储在数据库中的最省力的解决方案。以下是要求:

  • 这将是测试自动化工具的存储后端

  • 数据将是从队列中捕获的消息:可以是JSON,XML,二进制......但可以转换为统一表示

  • 数据将被写入一次,无论写入什么都不会改变

  • 将需要多个索引,但是基本索引应该是插入到数据库中的消息的时间戳 - 如果选择的数据库可以配置为自动提供(例如查询消息),那将会很好在两个时间戳之间插入 - 应该开箱即用)

  • 查询的简便性很重要(SQL最好,但事先并不知道消息的结构)

  • 表现并不重要

  • 容错,分区容差,可靠性等并不重要

  • 易于访问(例如,REST API,来自多个平台的API - JVM,JS等)非常重要。

我在看MongoDB,CouchDB,也许是Riak ......所有这些都可以工作,我只是不知道哪个是对上述要求的阻力最小。我熟悉Riak,但它的优点并不是我追求的......

3 个答案:

答案 0 :(得分:2)

@geraldss已经解决了INSERT问题。让我加上这个例子。

  1. 索引:您可以创建一个或多个字段的索引,查询将自动使用它们。 在my_bucket上创建索引idx_ins_time(insert_time); 从my_bucket中选择my_message    其中insert_time   在“2016-04-03T10:46:33.857-07:00”和“2016-04-05T10:46:33.857-07:00”之间; 使用EXPLAIN查看计划,就像SQL一样。
  2. 您可以创建多个索引,每个索引都包含一个或多个键。
  3. Couchbase N1QL支持大多数流行语言的REST API,JDBC / ODBC和SDK。

答案 1 :(得分:1)

似乎CouchBase是最好的选择,因为N1QL: here

它勾选所有其他框(自动时间戳索引除外,但是由于查询语言的原因,添加它并进行范围查询很简单。)

答案 2 :(得分:1)

如果使用Couchbase,可以使用N1QL的INSERT语句自动添加时间戳:

INSERT INTO my_bucket(KEY, VALUE)
VALUES ($my_key, {
    "insert_time": NOW_STR(),
    __my other data fields__
 }
)