在一个sqlite文件中绑定json文件的最佳方法
对于大约80MB的JSON数据,将其插入一个数据库文件需要大约2-3个小时,再加上许多其他资源。在一个SQLite数据库文件中写入多个JSON文件的最佳方法是什么?我可以将SQLite头写入文件中吗?通过SQLite转换可读数据中的字符串并关闭它。可能存在数据损坏错误,如何解决它们以及如何避免它们?除了标准的插入行方法或多行插入外,还有其他解决此问题的快速方法吗 通过SQLite网站:有一些关于该文件的信息,这是一个好的起点吗 编辑:在一个sqlite文件中绑定json文件的最佳方法,json,sqlite,Json,Sqlite,对于大约80MB的JSON数据,将其插入一个数据库文件需要大约2-3个小时,再加上许多其他资源。在一个SQLite数据库文件中写入多个JSON文件的最佳方法是什么?我可以将SQLite头写入文件中吗?通过SQLite转换可读数据中的字符串并关闭它。可能存在数据损坏错误,如何解决它们以及如何避免它们?除了标准的插入行方法或多行插入外,还有其他解决此问题的快速方法吗 通过SQLite网站:有一些关于该文件的信息,这是一个好的起点吗 编辑: foreach ($aTempHandler as $i
foreach ($aTempHandler as $i => $sBufferTemp)
{
#var_dump("\n______________ sBufferTemp");
if (empty($sBufferTemp)) continue;
$oTemp = json_decode($sBufferTemp);
#var_dump("\n______________ oTemp");
if (!is_object($oTemp)) continue;
if(empty($oTemp->date)) continue;
if (empty($this->check_table_exists($oTemp->date)))
{
if (empty($this->reate_table($oTemp->date)))
{
$this->configure();
}
print_r("Create table for: ". $oTemp->date ."\n");
}
if ($z == 2000) {
print_r($oTemp->id ." -> ". count($aTempHandler) ."\n");
$z = 0;
}
unset($oTemp->{'id'});
$bInsert = $this->insert_row($oTemp->date, $oTemp);
#continue;
$z++;
$x = 1;
}
public function insert_row($sp_, $oTemp)
{
$aTemp = (array) $oTemp;
$aForInsert = array(
'time' => $aTemp['time'],
'note' => (isset($aTemp['note']) ? json_encode($aTemp['note']) : null),
);
print_r('.');
return $this->db->exec("INSERT INTO $sp_ (". implode(",", array_keys($aForInsert)) .") VALUES ('". implode("','", array_values($aForInsert)) ."');");
}
上面的代码是迭代JSON文件中的行的部分。我出于其他原因替换了一些数据。创建表之后是insert_row函数,在该函数中生成并执行查询。这一部分花费的时间最长,因为每次我都需要分别构建查询并执行它,以便将数据放入相应的表中。即使进行另一个循环来构建更大的查询,也会产生同样的结果,或者对于我的双核i5处理器/16 Gb Ram/MacSSD来说,这将更加困难
参考资料
数据库文件格式。(注)。SQLite
JSON。(注)。JSON 80兆字节(MB)。我现在已经编辑了,谢谢。请展示一个JSON数据示例,以及您当前使用的速度太慢的技术,即MCVE@MarkSetchell是一个.JSON文件,其中包含许多编码为JSON字符串的PHP数组。脚本读取索引,如果.json文件存在,它将打开,并在foreach中逐行将数据插入sql数据库。完成后,它会移动文件,以便读取索引的脚本找不到它,并跳到下一个。请为您的内部循环显示一些具有代表性的代码。有很多地方你可能做错了或是“次优”。@MarkSetchell在这里,我已经编辑了这篇文章并添加了部分代码。