我想创建一个新集合,并向其中添加成千上万个大小约为1-2K的文档。我已经在json中保存了数据,因此我认为这很容易。
我知道该批处理一次可以写入500次,因此为了将其分成500块,我编写了以下代码。虽然出于测试目的,我以20个块运行它,而我的测试json有72个对象。
但我不断收到以下错误
node_modules\@google-cloud\firestore\src\write-batch.js:148
throw new Error('Cannot modify a WriteBatch that has been committed.');
^
Error: Cannot modify a WriteBatch that has been committed.
我的代码如下
var dataObj = JSON.parse(fs.readFileSync('./bigt.json'))
var tmpdd = dataObj.slice(0, 72)
var batch = db.batch();
console.log(tmpdd.length)
let tc = tmpdd.length
let lc = 0
let upperLimit = 20, dd = null
while(lc<=tc){
dd = tmpdd.slice(lc, upperLimit )
console.log(lc, upperLimit)
dd.map(
o => batch.set(db.collection('nseStocks').doc(o.Date+o.variable), o)
)
batch.commit().then(function () {
console.log('Written to firestore', lc, lc + upperLimit)
})
.catch(
(err) => console.log('Fail', err)
)
lc = upperLimit
upperLimit = upperLimit + 20
}
同样奇怪的是,似乎没有在循环的每次迭代中都提交批处理。理想情况下,我会让Firestore确定文档ID,但显然批处理没有添加功能。
我尝试过以循环方式添加文档,而不是批量写入。但是在添加一些文档后,它给我超时错误。当然,对于大量文档来说,这是不切实际的。
您可以说我对Firestore还是很陌生,这是我玩第二天。
请告诉我是否有明显的错误或更好的方法来完成此看似简单的任务。
谢谢
您正在为程序顶层的 所有 写入创建一个批处理。batch.set()
在所有批量写入操作中,所有调用都可以重用它。
var batch = db.batch();
相反,您应该为每组写入创建一个新批处理。您可以在while循环的顶部执行此操作:
while(lc<=tc) {
var batch = db.batch();
// use the new batch here
}
在本dynamodb文档中,说明了现有项目不能通过批量写入进行更新。但是,当我尝试时,它会替换新项目。我如何防止它更新已经存在的一个?
问题内容: 这是我在阅读有关jpa批量插入的几个主题之后创建的简单示例,我有2个持久对象User和Site。一个用户可以拥有多个站点,因此我们在这里有一对多的关系。假设我要创建用户并将多个站点创建/链接到用户帐户。考虑到我愿意为Site对象使用批量插入,代码如下所示。 但是,当我运行此代码时(我将hibernate方式用作jpa实现提供程序),我看到以下sql输出: 所以,我的意思是“真实的”批量
我正在写一个数据挖掘程序,可以批量插入用户数据。 当前SQL只是一个普通的批量插入: 如果发生冲突,如何进行更新?我试过: 但它抛出
dolphindb 目前使用的 是 pool = ddb.DBConnectionPool("0.0.0.0", 8903, 20, "admin", "123456") appender = ddb.PartitionedTableAppender("dfs://dd", "dd", "instrument_id", pool) 多线程 线程池写入 问题是: 批量写入有重复 怎么去除重复呢 写入
问题内容: 哪种nosql系统更适合开箱即用地处理大量插入?最好在1台物理机上运行(允许许多实例)。 有没有人做过基准测试?(谷歌搜索没有帮助) 注意 :我了解选择noSQL数据库取决于需要存储的数据类型(文档:MongoDB,图:Neo4j等)。 问题答案: Apache Cassandra 的独特持久性模型使其在写操作方面表现出色。有人声称它的写入速度比读取速度快20倍,但我认为它确实取决于您
问题内容: 我正在使用Python中的MySQLdb模块与数据库进行交互。我遇到的情况是有一个非常大的列表(成千上万个元素),需要将它们作为行插入表中。 我现在的解决方案是生成一个大的语句作为字符串并执行它。 有没有更聪明的方法? 问题答案: 有一种更聪明的方法。 批量插入的问题在于,默认情况下启用了自动提交功能,从而导致每个语句在下一次插入可以启动之前被保存到稳定存储中。 如手册页所述: 默认情