java—sqlite中的高性能json文本解析和存储

nc1teljy  于 2021-06-26  发布在  Java
关注(0)|答案(0)|浏览(588)

我正在对我的android(kotlin/java)应用程序进行重构,以极大地提高初始数据同步的性能,初始数据同步是通过我们的后端系统完成的,并存储在本地sqlite数据库中。该应用程序用于所有类型的android设备,在较旧的android设备上,这种同步可能需要数小时。
后端系统使用一个json(utf-8)api,每个批处理大约10.000个条目,其中包含大量字符串。
为了获得尽可能高的性能,我想我必须找到一种更有效地使用/解析字符串的方法。使用普通的json解析器和android sqlitestatement类,我只能做到:
将接收到的json响应(以mem byte[]为单位)解析为带有字符串的对象。
这些字符串由新的char[]支持,字节首先被复制并转换为utf-16到char[]。有效地加倍了字符串所需的内存。
sqlitedb使用utf-8编码。因此,将字符串绑定到其语句还需要一些转换步骤。
我已经实现了一些想法,但仍然有一些问题;
我可以将这些字符串解析为一个引用了原始byte[]缓冲区offset&length的对象,而不是解析(索引覆盖解析)到字符串对象。sqlitestatement类允许将byte[]绑定为blob。有效地直接在sqlite中插入utf-8字节。这种方法已经快得多了,但是仍然需要一些内存复制。更简洁的方法是sqlitestatement允许用偏移量和长度绑定原始byte[]缓冲区。但这节课是期末考试。。。
另一个想法是将string子类化,并让这个类由原始byte[]缓冲区offset&length支持。但是字符串类也是最终的。。。
实现一些charsequence听起来是一种很好的方法,但是sqlitestatement没有绑定该类型的方法。。。
二进制serdes不会因为所有的字符串而大大提高性能。
所以我想知道你们是否有一些想法如何减少对象分配和内存复制?
这个不安全的包裹能帮上什么忙吗(代理字符串?)
另一个选择是复制android.sqlite包,并创建我自己的sqlitestatement,支持byte[]/offset/length或charsequence。
还有其他想法吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题