从mysql服务器访问和存储大量数据

时间:2014-04-01 06:29:20

标签: php android mysql ios sqlite

我们正在开发一个iOS / Android应用程序,可从服务器下载大量数据。

我们正在使用JSON在服务器和客户端设备之间传输数据。

最近我们的数据量增加了很多(约30000条记录)。

获取此数据时,服务器请求会超时,并且不会获取任何数据。

有人能建议实现快速数据传输的最佳方法吗?

是否有任何方法可以准备数据并稍后下载数据?

在设备中使用多个数据库(SQLite dbS)并执行并行插入数据库是否有任何优势?

目前,我们只下载/上传更改的数据(使用UUID和时间戳)。

有没有最好的方法来有效地实现这一目标?

----编辑-----

我认为它不仅仅是mysql记录的问题,在高峰时候多个设备连接到服务器来访问数据,因此连接也会等待。我们正在使用性能服务器。我主要是寻找一种解决方案来处理设备中的同步。使用多线程,多个sqlite db等简化同步或使其更快的任何好方法......?或数据压缩,使用视图或......?

2 个答案:

答案 0 :(得分:1)

实现这一目标的一个好方法可能是根本不下载任何数据。

我猜你不会在你的客户端显示这些30k行,所以为什么要先下载它们呢?

在您的服务器上创建一个API可能会更好,这有助于移动设备与数据库通信,因此客户端只会下载他们实际需要/想要的数据。

然后,通过移动端的缓存系统,您可以确保客户每次都不会下载相同的内容,并且他们已经看到的内容可以脱机使用。

答案 1 :(得分:0)

  

获取此数据时,服务器请求会超时,并且不会获取任何数据。

您是否只谈论读取或写入?

如果您正在谈论写入访问权限:30,000是单个插入/更新的结果吗?你使用像InnoDB这样的交易引擎吗?如果是这样,您的查询是否包含在单个事务中?启用自动提交模式可能会导致严重的性能问题:

  

将多个修改包装到单个事务中以减少刷新操作的数量。如果该事务对数据库进行了修改,InnoDB必须在每次事务提交时将日志刷新到磁盘。磁盘的旋转速度通常最多为167转/秒(对于10,000RPM磁盘),如果磁盘不“欺骗”操作系统,则将提交次数限制为相同的167秒。

     

Source

     

有人能建议实现快速数据传输的最佳方法吗?

您的查询设计有多复杂?内部或外部联接,相关或非相关子查询等?使用EXPLAIN检查效率? Read about EXPLAIN

另外,看一下你的桌面设计:你是否使用过normalization?你正确索引吗?

  

是否有任何方法可以准备数据并稍后下载数据?

你是怎么回事?也许临时表可以做到这一点。

但是,如果不知道您项目的任何细节,一次在手机上下载30,000条记录对我来说听起来很奇怪。可能需要审查您的应用程序/数据库设计。

无论如何,对于不需要直接更新/插入数据库的任何数据,请在移动设备上使用本地SQLite。这要快得多,因为SQLite是一个基于文件的数据库,而且不需要通过网络传输数据。