rmongodb + 闪亮 --> 错误 15

Posted

技术标签:

【中文标题】rmongodb + 闪亮 --> 错误 15【英文标题】:rmongodb + shiny --> error 15 【发布时间】:2014-07-11 13:00:33 【问题描述】:

我正在使用 mongodb 为闪亮的应用程序保存一些数据。它似乎工作正常,只是当我在闪亮的应用程序中调用它时,一个 mongo.update 操作不起作用。疯狂的是,如果我在 R 中手动使用它,一切正常。

所以我尝试了 rmongodb 中的所有“错误获取”功能,在尝试更新 mongo.get.err 后,如果在闪亮的应用程序中运行,则返回“15”,但在手动运行时返回“0”。我只能找到一个列表来解释这个错误的含义(https://jira.mongodb.org/browse/NODE-153),它似乎意味着溢出。就我所见,mongodb 日志根本没有说什么。

我尝试使用print 进行调试,并将所有参数输入mongo.update,我确信它传递了正确的数据。

所以剩下的就是弄清楚使用 shiny + rmongodb 是如何串通起来造成这个问题的。

我传递的 bson 对象包含一个 714.6 Kb 的序列化对象。如果我从对象中删除它,mongo.update 就成功了。 那么究竟是什么原因造成的呢?任何提示表示赞赏。这两天我一直在拔头发……

mongodb版本:2.6.3 rmongodb 版本 1.6.53 R 开发中(不稳定)(2014-03-05 r65119) 64 位 Linux 薄荷

【问题讨论】:

【参考方案1】:

“讨论”总结: boot函数将整个工作环境保存在输出中(大概是为了多线程的目的)。这显然意味着当对象被序列化时,环境中的所有变量都会被序列化。 由于这个原因,对象可能会变得非常大,而 rmongodb 显然无法处理。

我能想出的唯一解决方案是删除有问题的引用: loess_boot$statistic <- NULL

反正可能不需要那部分,但我想应该可以用 refhook 参数做一些更聪明的事情来序列化。

我仍然想知道为什么 mongodb 无法处理写入对象。大小限制应该是多少?

【讨论】:

为了进一步解释和提示解决方案,我将在这里复制帮助中的内容:GridFS 是一种用于存储和检索超过 BSON 文档大小限制 16MB 的文件的规范。 rmongodb 中有几个命令可用于 gridFS。 GridFS 是一种用于存储和检索超过 BSON 文档大小限制 16MB 的文件的规范。 rmongodb 中有几个命令可用于 gridFS。【参考方案2】:

看起来很奇怪。我认为由于闪亮的反应式编程,mongo db 连接存在问题。

在执行命令之前,您是否测试了工作连接?

  if (!mongo.is.connected(mongo)) 
   ...
  

【讨论】:

很抱歉之前没有回来。我暂时不检查。但正如我所说,如果我不包含“大”序列化对象,它会起作用。所以不可能真的是这样,因为无论如何都会在写任何东西之前进行检查。 情节变厚...如果我替换:success mongo.remove(mongo, ns_sysmodels, criteria = criteria) success <- mongo.insert(mongo, ns_sysmodels, buf) 它在没有记录时有效.但如果我再次运行它会失败。 mongo.remove 成功。但不是插入。那么它现在每隔一段时间就会起作用,因为mongo.remove 总是删除记录。 我想我找到了问题所在。 object.size(loess_boot) 返回大约 700Kb,其中 loess_boot 是我要编写的对象(序列化)。如果我做temp = serialize(loess_boot, connection = NULL, ascii = FALSE),那么object.size(temp) 在我手动运行时大致相同。但是当使用闪亮时,如果重新运行,它将大约为 15000Kb 或 30000Kb;到那时它将失败。所以序列化的对象是不一致的。更深层次的原因似乎是loess_boot 包含一个环境函数。如果我只删除那部分,则序列化对象的大小保持不变,约为 700Kb。 顺便说一句。 loess_boot 是引导包中引导函数的输出。关于如何处理这个问题的任何想法? 似乎 boot 将整个调用环境保存在对象中。因此,这就是称为闪亮和称为“正常”时尺寸差异的原因。在您序列化之前,这不会产生不良影响,但是据我所知,您还可以序列化环境中的所有对象。知道该怎么做吗?我不能简单地清除环境,因为那会清除闪亮的环境。

以上是关于rmongodb + 闪亮 --> 错误 15的主要内容,如果未能解决你的问题,请参考以下文章

在 rmongodb 中分组

使用包 'rmongodb' 处理查询结果集

rmongodb: $exists 给出空结果

rmongodb 身份验证总是失败[重复]

rmongodb 没有为键返回不同的值

使用 rmongodb 时,在 mongoDB 中看不到集合