在我的一个项目中,我从一个巨大的json更新我的mysql数据库时遇到了问题。 有问题的json对象包含大约1000个这样的条目:
[{
"uniqueId":"578742901714e",
"lat": -76.760541,
"lng": 121.289062,
"description":"foo and bar",
"visible": true
}]
为了将json中的数据与数据库进行比较,我使用了不同循环中包含的不同语句。 虽然这有效但整个json需要花费一些时间~45秒来处理和写入。
编辑:
为了澄清,我循环遍历json_decode()返回的数组,并通过SELECT和INSERT STATEMENTS直接将数据与数据库进行比较 - 这可行,但速度很慢,因为数据很大
因为用户必须等待这一点以确保数据完整性,所以我决定加快这一点。
所以我看了使用INSERT INTO ON DUPLICATE KEY UPDATE,它应该适用于多个数据集。
但这是真正的问题: 因为有些条目喜欢" description"保存在他们自己的表中我需要像LAST_INSERT_ID()这样的东西来知道刚刚插入的数据集的自动增量id。但是LAST_INSERT_ID()不会以这种方式工作,只有在批处理INSERT中使用它时才会返回第一行。 (Documentation)
所以我陷入了一个正在运行但速度非常慢的执行和一个不起作用但是(假设)非常快的执行之间。
我真的不知道如何继续,你能帮助我吗?
修改
有问题的数据库包含一些表格。最突出的是以下两个:
表pi:#1 id int auto-increment primary
#2 unique_id varchar(13) unique
#3 date int(11)
#4 visible tinyint(1)/bool
表poi_description:
#1 id int auto-increment primary
#2 poi_id int(11)
#3 description text
#4 date int(11)
#5 user int(11)
在过去的两天里我读了很多,如果uniqueid已经在表中,我真的不确定如何更新行。我想,我可以让它与INSERT ON DUPLICATE UPDATE一起使用,但这只是主键 - 至少它是我看起来的样子。