android – sqlite3表,有限的最大行(按选择)效率

android – sqlite3表,有限的最大行(按选择)效率,第1张

概述我在间隔基础上存储数据(gps位置),我不希望DB膨胀,所以我定义了最多可以达到的MAX行数,然后每次插入新行时都会删除最旧的行. 现在,数据库专家查看了我的代码,他说它的方式效率不高,因为从数据库中删除一行是消耗 *** 作的最多时间/内存/程序,我应该不惜一切代价避免它. 他说我应该在达到MAX之后重复最旧的一行(更新). (所以每次都是自上而下) 这意味着我需要保存一个单独的“标题”表来保存我当前指 我在间隔基础上存储数据(gps位置),我不希望DB膨胀,所以我定义了最多可以达到的MAX行数,然后每次插入新行时都会删除最旧的行.

现在,数据库专家查看了我的代码,他说它的方式效率不高,因为从数据库中删除一行是消耗 *** 作的最多时间/内存/程序,我应该不惜一切代价避免它.

他说我应该在达到MAX之后重复最旧的一行(更新).
(所以每次都是自上而下)

这意味着我需要保存一个单独的“标题”表来保存我当前指向最旧行的指针并在每次插入时更新它(如果应用程序崩溃,我不想丢失它).
它真的更有效吗?任何其他方式更有效地做到这一点?

解决方法 将数据库表转换为环形缓冲区很愚蠢.
如果你真的想用这种方法……

>不要使用数据库只使用数据文件和IO
>
>在您的数据文件中,每条记录都是固定大小

>
>
> [时间戳] [纬度] [经度]

>
>
>您可以使用数据的字符串格式或二进制表示,只要它们是固定大小就无关紧要.

———- ———- gps.dat

[Ring Pointer][Time Stamp][Latitude][Longitude][Time Stamp][Latitude][Longitude]...[Time Stamp][Latitude][Longitude]

> Ring Pointer是长整数的二进制表示
>首次创建文件时,您将其大小设置为LONG_INTEGER_SIZE(MAX_RECORDS * RECORD_SIZE)的大小

如果要添加记录:

>从文件开头读取[Ring Pointer]>将[Ring Pointer] 1写入文件的开头(这样人们就不会感到困惑,保持[Ring Pointer]变量相同,只需将新值写回文件)>转到位置LONG_INTEGER_SIZE(([Ring Pointer]%MAX_RECORDS)* RECORD_SIZE)>在该位置写下您的新记录

总结

以上是内存溢出为你收集整理的android – sqlite3表,有限的最大行(按选择)效率全部内容,希望文章能够帮你解决android – sqlite3表,有限的最大行(按选择)效率所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1126526.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存