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

Posted

技术标签:

【中文标题】从mysql服务器访问和存储大量数据【英文标题】:Access and store large amount of data from mysql server 【发布时间】:2014-05-11 18:50:12 【问题描述】:

我们正在开发一个从服务器下载大量数据的ios/android 应用程序。

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

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

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

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

有什么方法可以先准备数据,然后再下载数据?

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

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

是否有任何最佳方法可以有效地实现这一目标?

---- 编辑 -----

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

【问题讨论】:

Recently size of data increased to large size like 30000 records, then server request get timed out and no data get fetched on the request:如果您必须同时获取所有 30000 条记录以进行显示,那么您几乎可以肯定做错了。否则 30,000 条记录对于 MySQL 数据库来说不算什么。 300万也不算什么 您永远不会一次获取如此大量的数据。使用paging 就像将消息加载到 facebook 或 twitter 中一样。对此进行研究。 @Hanky웃Panky : 我知道它的数据量不是很大,但是基于多个条件获取数据并创建 json 等需要花费太多时间。将来有机会增加数据的大小此外,我们正在寻找一种长期解决方案来处理这种情况。 但是为什么要一起获取 30,000 条记录呢?如果不是这种情况并且获取仍然很慢,那么让 DBA 浏览数据库模式并寻找适当的规范化和索引以开始 我认为不仅仅是mysql记录的问题,在高峰期多个设备连接到服务器访问数据,因此连接也进入等待。我们正在使用性能服务器。我主要是在寻找一种解决方案来处理设备中的这种同步。有什么好方法可以简化同步或使用多线程、多个 sqlite db 等使其更快......?或数据压缩,使用视图或...? 【参考方案1】:

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

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

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

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

【讨论】:

另外,修改您的数据库结构,规范您的数据并设置适当的索引。【参考方案2】:

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

你也只是在谈论读取或写入吗?

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

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

Source

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

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

另外,看看你的桌子设计:你用过normalization吗?您的索引是否正确?

有什么方法可以先准备数据,然后再下载数据?

你是什么意思?也许临时表可以解决问题。

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

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

【讨论】:

以上是关于从mysql服务器访问和存储大量数据的主要内容,如果未能解决你的问题,请参考以下文章

mysql 数据库引擎介绍

MySQL查询高速缓冲详解

优化 SQL 查询以从大量 MySQL 数据库中获取数据

从本地服务器访问 android 应用程序中的 mysql 数据库期间出现 java.io.FileNotFoundException

MySQL数据库基础

c++能访问mycat的吗