php - 使用 PHP 将 MySQL 查询输出为 SQLite

标签 php mysql ios sqlite

我们有一个 iOS 应用程序,它必须从远程服务器下载大量用户数据(JSON 格式),然后将这些数据插入本地 SQLite 数据库。因为数据太多,插入过程需要5分钟以上才能完成,这是 Not Acceptable 。该过程必须少于 30 秒。

我们已经确定了一个潜在的解决方案:让远程服务器将用户数据存储在 SQLite 数据库中(在远程机器上)。该数据库被压缩,然后由应用程序下载。因此,该应用程序无需进行任何数据插入,从而使该过程更快。

我们的远程服务器正在运行 PHP/MySQL。

我的问题:

  • 在远程服务器上创建 SQLite 数据库的最快、最有效的方法是什么?
  • 是否可以将 MySQL 查询直接输出到 SQLite 表中?
  • 是否可以创建一个临时的 MySQL 数据库,然后将其转换为 SQLite 格式?
  • 或者我们是否必须获取 MySQL 查询输出并将每条记录插入到 SQLite 数据库中?

如有任何建议,我们将不胜感激。

最佳答案

我认为最好看看为什么插入过程需要 5 分钟。

如果你在 SQLite 中做得不好,每个插入语句都会在一个单独的事务中执行。众所周知,这非常慢。在一个 SQLite 事务中执行所有插入要好得多。这应该使插入过程非常快,即使您谈论的是很多记录。

在伪代码中,您需要执行以下操作:

SQLite.exec('begin transaction');
for (item in dataToInsert) {
    SQLite.exec('insert into table values ( ... )');
}
SQLite.exec('end transaction');

如果您想从 PHP 创建 SQLite 数据库,这同样适用。

您可以在这里阅读很多相关信息:Improve INSERT-per-second performance of SQLite?

关于php - 使用 PHP 将 MySQL 查询输出为 SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17880875/

相关文章:

mysql - MySQL如何使用多字段索引进行中间索引字段为OR的查询?

iOS spriteKit 子节点相对于 View 坐标的位置

php - 如何选择外键子行早于特定日期的所有父行?

php - 如何从订单中获取 CustomerName?

MySQL - 返回 View 数,如果没有行则返回 0

ios - 如何在ios中获取一个部分的行数

ios - 如何在 Xcode 8 中使用 Swift 2.3 而不是 Swift 3 来构建我的项目?

php - 如何在 Laravel 中使用子文件夹中的自定义类?

php - 从电子邮件标题转换数据

java - 从 Microsoft SQL 获取的阿拉伯语数据未正确显示