- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 node-csv-parser读取 csv 数据并使用 mongoose 将其存储在 mongodb 中。但是,我正在尝试加快导入速度,并且我想使用 node-mongodb-native
公开的 native 保存方法进行评估,使用 Model.collection
在 mongoose 中访问. (这是我在 Mongo 总部的办公时间与一位 mongo 工程师交谈的建议)。
node-csv-parser
每次读取 csv 的新行时都会触发 data
事件。在这个事件中,我读入了数据行,从中创建了一个新的数据点,并将其保存在 mongo 中。我可以使用 Mongoose 模型 TestDataPoint
将数据点保存在 data
事件中。但是,如果我尝试为数据点创建一个 javascript 对象并使用 TestDataPoint.collection.save
保存它,我会收到错误:RangeError: Maximum call stack size exceeded
.
我试过以各种不同的方式调用这个本地保存,包括直接通过 mongoose.connection.db.collection("testdatapoints")
获取集合并将其发送到async 提供的队列模块,但总是有或多或少相同的结果。我可以在代码中的其他地方使用 native 驱动程序成功保存数据点,甚至在 csv 导入的 end
事件中,只是不在 data
事件中。
我还通过记录确定在我当前的设置(64 位 AMD 处理器上的 Ubuntu 12.04,8 GB RAM)上,代码在抛出堆栈错误之前迭代了 csv 的 154 行,但是没有写入数据从这个 data
事件中到数据库。似乎无意中发生了某种递归(?),或者它可能是 node-csv-parser 和 node-mongodb-native 之间的某种错误。
为了澄清,我在下面的(编辑/更新的)示例代码中,日志重复了 154 次:
about to call native save
just called native save
然后说:
in native save callback for dataPoint: 1
Native save failed, error:RangeError: Maximum call stack size exceeded
in native save callback for dataPoint: 2
Native save failed, error:RangeError: Maximum call stack size exceeded
直到数据点 154,然后它再重复“即将调用/刚刚调用”154 次,然后记录数据点 155-308 的错误,依此类推(我有很多数据点要导入)。这个 154 数字是相当可重复的,我想我已经观察到它一次或两次经过 155 行。
有人建议我将保存调用包装在 process.nextTick()
中以清除堆栈。当我尝试这样做时,在我的日志中我可以看到保存被调用了 154 次,然后 process.nextTick()
被调用了 154 次,然后 RangeError 被记录了 154 次,然后序列重复。
我正在运行 node 0.8.2、mongoose 2.7.2 和 mongodb 2.0.4。
csv()
.fromPath(path)
.on("data", (data, index) ->
# cellTest is an instance of a Mongoose model object
newDataPoint =
testId: cellTest.testId # this assignment was causing recursion in the native save
dataPoint: data[1]
testTime: data[2]/3600
cycleIndex: data[3]
console.log "about to call native save"
# TestDataPoint is my my mongoose model, which saves fine, but
# this call throws the RangeError: Maximum stack size exceeded
TestDataPoint.collection.save newDataPoint, safe:true, (err, dataPoint) ->
console.log "in native save callback for dataPoint: " + data[1]
if err
console.log "Native save failed, error:" + err
console.log "just called native save"
.on("end", (count) ->
newDataPoint =
dataPoint: 100 # dummy values
testTime: 200
cycleIndex: 300
# This call works, saves the data point
TestDataPoint.collection.save newDataPoint, safe:false, null
)
.on("error", (err) ->
console.log err
)
编辑:已解决!
作业:
testId: cellTest.testId
导致保存递归。与 cellTest 是另一个 Mongoose 模型的实例有关。将分配更改为:
testId: parseInt(cellTest.testId)
消除了递归并允许执行保存。
最佳答案
这个问题已经解决了。在我的实际代码中,我将 newDataPoint
的一个属性设置为等于另一个 Mongoose 模型对象的整数属性。 (下次我会知道不要从我的样本中“简化”那个细节!)这不知何故导致了保存时的递归。
我通过围绕该值的赋值包装一个 parseInt()
来修复它。保存工作正常,比使用 Mongoose 快大约 3 倍(我知道我放弃了一些不使用 Mongoose 的东西,但这对我的应用程序来说很好,我在其中记录了很多数据点,而没有一个点是全部那很重要)。
关于node.js - 在 node-csv-parser : RangeError: Maximum call stack size exceeded 中调用 node-mongodb-native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11573241/
在编写代码时,当我编写 struct *Stack stack 时,代码无法工作,而当我像 struct Stack* stack 那样编写代码时,代码可以工作有人告诉我这两个代码之间的区别吗? 最佳
我的教授要我绘制堆栈吗?他想让我付诸行动吗?我觉得自己很愚蠢,但这不像任何人告诉我的那样!感谢您的帮助。 哇,你们真快。已经谢谢你了。完整的问题是:考虑两个堆栈,每个堆栈的大小为 n(即,每个堆栈最多
是new Stack[N]相当于new Stack[N]对于通用数据类型 Stack ? 编辑:虽然我知道最好避免混合泛型类型和数组,并且存在更强大的解决方案,但我的查询仍然存在:被广泛认可的教科书,
我正在尝试使用堆栈的 printf() 打印 stack.top() 的返回值,但它给出的格式不匹配。代码如下: int main(){ stack cards; char *ch1
我正在尝试做一个 dapp 项目。 我有一个堆栈太深的错误,但我不知道如何解决这个问题。 CompilerError: Stack too deep, try removing local varia
在哪里stack haddock (或 stack build --haddock )放置它生成的文档? 最佳答案 这取决于为“属于”生成黑线鳕的包的位置。 “本地”包的 Haddocks 是堆栈项目
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
基本上,我有 2 个文件(.adb 和 .ads)。我对 Ada 以及如何编译 2 个文件完全陌生。该程序是一个基本的堆栈实现。编译 .adb 文件时出现此编译错误。 $ gcc -c test_ad
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
您好,我正在尝试在微服务架构中使用 ELK 堆栈,其中有许多服务分布在许多服务器上。 现在我已经配置了 Kibana 和 ElasticSearch。现在我的疑问是我必须在哪里安装 Logstash。
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
我正在学习 Haskell,但遇到了我没想到的异常“堆栈溢出”。 代码相当简单: type Reals = Double prod :: Reals -> Reals -> Reals prod a
在我的 PC(最新的 JDK 和编译器版本)上,我的程序运行得非常顺利。但在我教授的计算机上,她说她遇到了两个错误 1) Stack myStack= new Stack() 类型的非法开始 2) 非
当我尝试在调用跟踪后执行 ./stack.sh 时,我收到以下错误: `[Call Trace] ./stack.sh:217:source /home/work/devstack/stackrc
1 上下文 我参与了一个涉及大量 C 位和 FFI 的 Haskell 项目。所以我发现自己经常运行和重新运行命令,比如 $ stack build $ stack build --force-dir
关于 SO 上的堆栈的问题,终于!我的一生都让我走到了这一步。 所以我需要将我制作的一些相当大的自定义数据结构合并到一个堆栈中。我决定编写一个仅包含一个整数值的最小堆栈结构。这里是 - MODULE
我只是想知道为什么在括号之间嵌入表达式时会得到两个不同的成员列表,例如gl-stack。看起来,如果没有括号,表达式就会被完全求值,并且结果会立即传递到下一个管道组件。但通过括号,集合中的单个对象将被
是否可以保存Stack>在onSaveInstanceState . 是否可以通过另一种方式保存某些特定数据来管理 Activity 状态? 最佳答案 您无法将 View 保存到 bundle 中。无
这个问题已经有答案了: Why don't Java Generics support primitive types? (5 个回答) 已关闭 9 年前。 为什么我不能使用Stack ? 除了拳击之
基于数组的实现级别 #include "stack.h" void creat_stack(Stack *s) { s->Top = 0; } int isFull(Stack s) {
我是一名优秀的程序员,十分优秀!