与存储过程和大型数组相关的哪个 nosql 选项?
Which nosql option relative to stored procedures and large arrays?
我有一个 nosql 数据存储的用例,但我不知道该使用哪个:
我的数据存储中的每个文档都有一个用于 _id 的键和另一个作为对象数组的键。该数组的每个对象哈希元素都有一个用于 _elementid 的键和另一个用于颜色的键。
我希望我的服务器代理向数据存储发送一个更新请求,其中包含一个用作正则表达式的子字符串,该子字符串限定 _id 与正则表达式匹配的所有文档。然后我想将一个元素推送到此输出的每个文档的数组中。这个新元素对于每个 unshift 都将具有相同的颜色,但 _elementid 对于每个元素都是唯一的。
是否有提供这种存储过程的 nosql 选项?对数组的长度有限制吗?
*** 编辑 ***
(1)
文件 A:
{
_id : "this_is-an-example_10982029822",
dataList : [
{
_elementid : "999999283902830",
color : "blue",
}, {
_elementid : "99999273682763",
color : "red"
}
]
}
DOCUMENT B:
{
_id : "this_is-an-example_209382093820",
dataList : [
{
_elementid : "99999182681762",
color : "yellow"
}
]
}
(2) 更新请求示例
(let [regex_ready_array ["this_is-an-example" "fetcher" "finder"]
fetch_query_regex (str "^" (clojure.string/join "|^" regex_ready_array))
element_template {
:_elementid { (rand-int 1000000000000000) }
:color "green"
}
updated_sister_objs (mc/bulk-update connection "arrayStore" {:_id {$regex fetch_query_regex }} "unshift" element_template)])
(3)
文件 A:
{
_id : "this_is-an-example_10982029822",
dataList : [
{
_elementid : "999999146514612",
color : "green",
}, {
_elementid : "999999283902830",
color : "blue",
}, {
_elementid : "99999273682763",
color : "red"
}
]
}
DOCUMENT B:
{
_id : "this_is-an-example_209382093820",
dataList : [
{
_elementid : "9999997298729873",
color : "green",
}, {
_elementid : "9999918262881762",
color : "yellow"
}
]
}
*** 编辑 2 ***
(1) dataList 数组可能很大(大到 MongoDB 的 16mb 文档大小限制会出现问题);
(2) 分配给附加 dataList 元素的 _elementid 值对于每个新元素都是不同的,商店会自动将这些值分配为随机数值
(3) 单个更新请求应应用所有更新,而不是每个附加元素一个更新;
(4) OP 正在寻找几个 'nosql solutions' 之间的比较和对比,其中 MongoDB、Cassandra、Redis 和 CouchDB 被建议作为可能的候选者。
看到你的问题。我了解到您正在使用 JSONs 和 Clojure。
让我们看看哪些是适合 JSON 的 NoSQL。流行的 NoSQL 快速概览
Apache Cassandra:Cassandra 中的数据模型本质上是键值和面向列(或表格)的数据库管理系统的混合体。它的数据模型是分区行存储,具有一致性。
Redis:Redis 将键映射到类型 values.It 除了字符串之外还有一些抽象数据类型,例如列表、集合、排序集合、哈希表、地理空间数据。
Apache CouchDB:CouchDB 管理 JSON 文档的集合。
MongoDB :CouchDB 管理着一组 BSON 文档。 BSON 是二进制 JSON http://bsonspec.org/spec.html.
如果您使用大量 JSON 负载,您可以使用 MongoDB 或 Apache CouchDB。但是您想根据 REGEX 更新 JSONs。
让我们检查 CouchDB 和 MongoDB
的 REGEX 功能
可以在 CouchDB 和 MongoDB
中使用 MAP Reduce 轻松完成
正则表达式 Select: db.student.find( { f_name: { $regex: 'this_is-an-example.*'} }).pretty();
MongoDB:在mongodb中我们有正则表达式操作。我试过了,效果很好。
引用
https://docs.mongodb.com/manual/reference/operator/query/regex/
mongoDB update statement using regex
https://www.w3resource.com/mongodb/mongodb-regex-operators.php
- CouchDB:我还没有尝试过使用 Regex 的 CouchDB,但据我所知这是可能的。根据 CouchDB 文档,可以使用 Regex 函数。
{
"selector":{
"afieldname": {"$regex": "^A"}
}
}
参考
- http://docs.couchdb.org/en/2.0.0/api/database/find.html
- Temporary couchdb view of documents with doc_id matching regular expression
您可以选择 MongoDB 和 CouchDB。 MongoDB.
有很多资源可用
我有一个 nosql 数据存储的用例,但我不知道该使用哪个:
我的数据存储中的每个文档都有一个用于 _id 的键和另一个作为对象数组的键。该数组的每个对象哈希元素都有一个用于 _elementid 的键和另一个用于颜色的键。
我希望我的服务器代理向数据存储发送一个更新请求,其中包含一个用作正则表达式的子字符串,该子字符串限定 _id 与正则表达式匹配的所有文档。然后我想将一个元素推送到此输出的每个文档的数组中。这个新元素对于每个 unshift 都将具有相同的颜色,但 _elementid 对于每个元素都是唯一的。
是否有提供这种存储过程的 nosql 选项?对数组的长度有限制吗?
*** 编辑 ***
(1) 文件 A:
{
_id : "this_is-an-example_10982029822",
dataList : [
{
_elementid : "999999283902830",
color : "blue",
}, {
_elementid : "99999273682763",
color : "red"
}
]
}
DOCUMENT B:
{
_id : "this_is-an-example_209382093820",
dataList : [
{
_elementid : "99999182681762",
color : "yellow"
}
]
}
(2) 更新请求示例
(let [regex_ready_array ["this_is-an-example" "fetcher" "finder"]
fetch_query_regex (str "^" (clojure.string/join "|^" regex_ready_array))
element_template {
:_elementid { (rand-int 1000000000000000) }
:color "green"
}
updated_sister_objs (mc/bulk-update connection "arrayStore" {:_id {$regex fetch_query_regex }} "unshift" element_template)])
(3) 文件 A:
{
_id : "this_is-an-example_10982029822",
dataList : [
{
_elementid : "999999146514612",
color : "green",
}, {
_elementid : "999999283902830",
color : "blue",
}, {
_elementid : "99999273682763",
color : "red"
}
]
}
DOCUMENT B:
{
_id : "this_is-an-example_209382093820",
dataList : [
{
_elementid : "9999997298729873",
color : "green",
}, {
_elementid : "9999918262881762",
color : "yellow"
}
]
}
*** 编辑 2 ***
(1) dataList 数组可能很大(大到 MongoDB 的 16mb 文档大小限制会出现问题);
(2) 分配给附加 dataList 元素的 _elementid 值对于每个新元素都是不同的,商店会自动将这些值分配为随机数值
(3) 单个更新请求应应用所有更新,而不是每个附加元素一个更新;
(4) OP 正在寻找几个 'nosql solutions' 之间的比较和对比,其中 MongoDB、Cassandra、Redis 和 CouchDB 被建议作为可能的候选者。
看到你的问题。我了解到您正在使用 JSONs 和 Clojure。
让我们看看哪些是适合 JSON 的 NoSQL。流行的 NoSQL 快速概览
Apache Cassandra:Cassandra 中的数据模型本质上是键值和面向列(或表格)的数据库管理系统的混合体。它的数据模型是分区行存储,具有一致性。
Redis:Redis 将键映射到类型 values.It 除了字符串之外还有一些抽象数据类型,例如列表、集合、排序集合、哈希表、地理空间数据。
Apache CouchDB:CouchDB 管理 JSON 文档的集合。
MongoDB :CouchDB 管理着一组 BSON 文档。 BSON 是二进制 JSON http://bsonspec.org/spec.html.
如果您使用大量 JSON 负载,您可以使用 MongoDB 或 Apache CouchDB。但是您想根据 REGEX 更新 JSONs。
让我们检查 CouchDB 和 MongoDB
的 REGEX 功能可以在 CouchDB 和 MongoDB
中使用 MAP Reduce 轻松完成正则表达式 Select: db.student.find( { f_name: { $regex: 'this_is-an-example.*'} }).pretty();
MongoDB:在mongodb中我们有正则表达式操作。我试过了,效果很好。
引用
https://docs.mongodb.com/manual/reference/operator/query/regex/
mongoDB update statement using regex
https://www.w3resource.com/mongodb/mongodb-regex-operators.php
- CouchDB:我还没有尝试过使用 Regex 的 CouchDB,但据我所知这是可能的。根据 CouchDB 文档,可以使用 Regex 函数。
{ "selector":{ "afieldname": {"$regex": "^A"} } }
参考
- http://docs.couchdb.org/en/2.0.0/api/database/find.html
- Temporary couchdb view of documents with doc_id matching regular expression
您可以选择 MongoDB 和 CouchDB。 MongoDB.
有很多资源可用