Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从服务器下载二进制的大型SQLite数据库与在设备上创建数据库_Java_Android_Json_Sqlite - Fatal编程技术网

Java 从服务器下载二进制的大型SQLite数据库与在设备上创建数据库

Java 从服务器下载二进制的大型SQLite数据库与在设备上创建数据库,java,android,json,sqlite,Java,Android,Json,Sqlite,我有一个应用程序,需要创建和下载一个非常大的SQLite数据库。根据用户的数据,创建数据库和从服务器同步数据可能需要20到25分钟(有些客户有大量数据)。数据作为JSON下载,并使用Android内置的JSON类进行处理 为了解决我在某些设备上遇到的OutOfMemory问题,我需要将每次从服务器下载的通话次数限制为500条记录。但是,到目前为止,上述所有措施都取得了成功——尽管进展缓慢 最近,我的团队讨论在服务器端创建完整的SQLite db,然后将其以二进制形式下载到设备上,以加快速度。我以

我有一个应用程序,需要创建和下载一个非常大的SQLite数据库。根据用户的数据,创建数据库和从服务器同步数据可能需要20到25分钟(有些客户有大量数据)。数据作为JSON下载,并使用Android内置的JSON类进行处理

为了解决我在某些设备上遇到的OutOfMemory问题,我需要将每次从服务器下载的通话次数限制为500条记录。但是,到目前为止,上述所有措施都取得了成功——尽管进展缓慢

最近,我的团队讨论在服务器端创建完整的SQLite db,然后将其以二进制形式下载到设备上,以加快速度。我以前从未这样做过。这真的是一个可行的选择吗?还是我应该通过GSON或Jackson这样的第三方库来加快JSON的处理速度


提前感谢您的投入。

根据我在移动设备方面的经验,在大多数情况下,重新发明同步是一种过火的行为。这显然取决于您使用的硬件、软件和数据量。但是,移动设备上长时间的操作执行时间大多是由于设计错误、编码粗心或未考虑嵌入式系统的细节造成的

不幸的是,我只能给你一些你可以考虑的暗示,对你所面临的问题给出了非常模糊的描述。我的意思是“很多”对我来说意义不大——我见过DBs上的移动应用程序包含数百万条记录,运行非常平稳,而那些有大约1K条记录的应用程序运行速度非常慢,导致UI冻结。您也没有提到您正在使用的操作系统版本和设备(或至少它的功能)。服务器配置是什么,安装了什么软件,使用了什么库/框架,以及采用了什么模式。当你真的想加快速度时,这一切都很重要

除了编码为gzip(我相信您保留了默认值,即上的),您还应该尝试一下这个想法:

  • 流媒体!-确保客户端和服务器都使用JSON API的流版本,并使用缓冲流。如果其中一个没有-用一个库替换它。Jackson拥有最快的流式API之一。当然,编写(反)序列化程序会更麻烦,但这是值得的。正确完成后,任何一方都不必创建足够大的缓冲区来(反)序列化所有数据,用内容填充它,然后解析/写入它。相反,随着连续字段的序列化,分配并逐渐填充更小的缓冲区。当这个缓冲区被填满时,它的内容立即被发送到数据通道的另一端。在那里,它可以立即反序列化。该过程将继续,直到所有数据都以小数据块的形式传输。它使数据交换更加流畅,资源密集度更低
  • 对于大批量插入或更新,请使用准备好的语句。它有时也有助于在没有约束的情况下插入数据,然后创建它们——例如,通过这种方式,可以在一次运行中计算索引,而不是每次插入。不要使用事务(它们需要维护额外的数据库日志)或每300行提交一次以最小化开销。如果您正在更新现有数据库,并且需要进行原子修改,请将新数据加载到临时数据库中,如果一切正常,则立即用新数据库替换旧数据库
  • 例如,一些数据几乎总是可以预先计算并存储在sd卡上。或者,它可以作为公司准备好的SQLite DB直接加载到sd卡上。如果一项任务需要的数据太大,以至于导入需要10分钟以上,那么您可能首先不应该在移动设备上执行该任务

  • 我假设您已经将GZIP压缩应用于JSON,同时将其发送到Android客户端?事实上,没有-如果实现更快的JSON库,这肯定是整个解决方案的一个元素。但是,单凭这一点是没有多大帮助的,因为在处理插入数据库的JSON记录方面似乎存在瓶颈。无论如何,在修改现有的实现之前,我真的很想就我原来的问题获得一些意见。谢谢你的主意,菲利普。我发表了评论并投了赞成票。