mongodb数据库批量插入海量数据时为什么有少部分数据丢失

mongodb数据库批量插入海量数据时为什么有少部分数据丢失,第1张

去查看爬虫代码,debug一下,结果才发现原来是因为_id 的数据在网页没有显示出来,导致数据全部重复!

我只能说**网站这坑货!!哥,冒险不用代理爬的11万数据,你居然给我来这限制!再见还好发现得早,不然等被你禁了ip才发现,那我去不是亏大发了微笑

唉,总结一下,抚慰我受伤的心,希望不会有人犯和我一样的错误!

知识点:

MongoDB数据库默认是通过 _id 来说写入的每个数据进行建立索引的,也就是说,通过

>db.person.update({'_id':id}, data, True)

或者

>db.person.insert(data)

这两种方式的话,只要_id是相同的,那么就不会写入数据库!!这就是哥我犯错的地方!

所以啊,在写入数据库的时候一定要找好唯一 的值赋给 _id,不行的话,_id 就不要赋值,数据库会默认加上的。

Game Over!

有时间再把自己摸索了一段时间的pyspider和mongodb以及rabbitmq的结果做个记录。。

一次性插入大量数据,只能使用循环,

如:游标,while 循环语句

下面介绍While 循环插入数据,

SQL 代码如下:

IF OBJECT_ID('dbo.Nums') IS NOT NULL

DROP TABLE dbo.Nums

GO

CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY)

DECLARE @max AS INT, @rc AS INT

SET @max = 5000000

SET @rc = 1

INSERT INTO Nums VALUES(1)

WHILE @rc * 2 <= @max

BEGIN

INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums

SET @rc = @rc * 2

END

INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max

--以上函数取自Inside SQL Server 2005: T-SQL Query一书。

INSERT dbo.Sample SELECT n, RAND(CAST(NEWID() AS BINARY(16))) FROM Nums

PHP批量添加数据方法如下:

1、在HTML里这样写:

<form ........

<input type="text" name="haoma[]" />

<input type="text" name="haoma[]" />

<input type="text" name="haoma[]" />

....

第N个

2、PHP中这样 *** 作:

foreach($_POST['haoma'] as $v){

    $sql="insert into haoma values('',$v)"

    .......

}

3、当然这样写一条一条的效率是会慢,再改一下

foreach($_POST['haoma'] as $v){

    $values.="('',$v),"

}

$values=substr($values,0,strlen($values)-1)

$sql="insert into haoma values $values"

......

下面的query我就不写了


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11636298.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存