草庐IT

mongodb - 哪个 nosql 选项相对于存储过程和大型数组?

coder 2023-05-05 原文

我有一个 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 解决方案”之间的比较和对比,建议将 MongoDB、Cassandra、Redis 和 CouchDB 作为可能的候选者。

最佳答案

通过看到您的问题。我了解您正在使用 JSON 和 Clojure。

让我们看看哪些 NoSQL 适合 JSON。流行的 NoSQL 快速概览

  1. Apache Cassandra:Cassandra 中的数据模型本质上是键值对和面向列(或表格)数据库管理系统的混合体。它的数据模型是具有一致性的分区行存储。

  2. Redis:Redis 将键映射到值的类型。它有一些除字符串之外的抽象数据类型,如 List、Sets、Sorted Sets、Hash Tables、地理空间数据。

  3. Apache CouchDB :CouchDB 管理 JSON 文档的集合。

  4. MongoDB:CouchDB 管理 BSON 文档的集合。 BSON 是二进制 JSON http://bsonspec.org/spec.html .

如果您使用大量 JSON 负载,您可以使用 MongoDB 或 Apache CouchDB。但是您想根据 REGEX 更新 JSON。

让我们检查一下 CouchDB 和 MongoDB 的 REGEX 功能

  • 在 CouchDB 和 MongoDB 中都可以使用 MAP Reduce 轻松完成

    正则表达式选择:db.student.find( { f_name: { $regex: 'this_is-an-example.*'} } ).pretty();

  • MongoDB:在 mongodb 中,我们有正则表达式操作。我已经尝试过了,它工作正常。

引用

  1. https://docs.mongodb.com/manual/reference/operator/query/regex/

  2. mongoDB update statement using regex

  3. https://www.w3resource.com/mongodb/mongodb-regex-operators.php

    • CouchDB:我还没有尝试过使用 Regex 的 CouchDB,但据我所知,这是可能的。正则表达式函数可根据 CouchDB 文档获得。

    { “选择器”:{ "afieldname": {"$regex": "^A"} } }

引用

  1. http://docs.couchdb.org/en/2.0.0/api/database/find.html
  2. Temporary couchdb view of documents with doc_id matching regular expression

您可以使用 MongoDB 和 CouchDB 中的任何一个。 MongoDB 有很多可用的资源。

关于mongodb - 哪个 nosql 选项相对于存储过程和大型数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46548814/

有关mongodb - 哪个 nosql 选项相对于存储过程和大型数组?的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby - 默认情况下使选项为 false - 2

    这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb

  3. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

  4. ruby - Rack:如何将 URL 存储为变量? - 2

    我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

  5. ruby - 正则表达式在哪个位置失败? - 2

    我需要一个非常简单的字符串验证器来显示第一个符号与所需格式不对应的位置。我想使用正则表达式,但在这种情况下,我必须找到与表达式相对应的字符串停止的位置,但我找不到可以做到这一点的方法。(这一定是一种相当简单的方法……也许没有?)例如,如果我有正则表达式:/^Q+E+R+$/带字符串:"QQQQEEE2ER"期望的结果应该是7 最佳答案 一个想法:你可以做的是标记你的模式并用可选的嵌套捕获组编写它:^(Q+(E+(R+($)?)?)?)?然后你只需要计算你获得的捕获组的数量就可以知道正则表达式引擎在模式中停止的位置,你可以确定匹配结束

  6. ruby-on-rails - 为什么在 Rails 5.1.1 中删除了 session 存储初始化程序 - 2

    我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于

  7. Ruby on Rails regexp equals-tilde 与 array include 用于检查选项列表 - 2

    我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试

  8. ruby-on-rails - 尝试设置 Amazon 的 S3 存储桶 : 403 Forbidden error & setting permissions - 2

    我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不

  9. ruby - 使用哪个,eruby 还是 erb? - 2

    eruby和erb有什么区别?哪些考虑因素会促使我选择其中之一?我的应用程序正在为网络设备(路由器、负载平衡器、防火墙等)生成配置文件。我的计划是对配置文件进行模板化,在源文件中使用嵌入式ruby​​(通过eruby或erb)来执行诸如迭代生成路由器的所有接口(interface)配置block之类的操作(这些block都非常相似,仅在标签上有所不同和IP地址)。例如,我可能有这样一个配置模板文件:hostnamesample-routerlogging10.5.16.26当通过嵌入式ruby​​解释器(erb或eruby)运行时,会产生以下输出:hostnamesample-rout

  10. ruby - 如何打印出 Mechanized 存储的 cookie? - 2

    我正在使用mechanize登录网站,然后检索页面。我遇到了一些问题,我怀疑这是由于cookie中的某些值造成的。当Mechanize登录网站时,我假设它存储了cookie。如何通过Mechanize打印出存储在cookie中的所有数据? 最佳答案 代理有一个cookie方法。agent=Mechanize.newpage=agent.get("http://www.google.com/")agent.cookiesagent.cookies.to_scookie返回一个Mechanize::Cookiesobject

随机推荐