首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有有限最大行(根据选择)效率的sqlite3表

具有有限最大行(根据选择)效率的sqlite3表
EN

Stack Overflow用户
提问于 2012-03-06 15:45:18
回答 1查看 1.3K关注 0票数 4

我在间隔的基础上存储数据(gps位置),我不希望数据库膨胀,所以我定义了一个它可以上升到的最大行数,然后每次我插入一个新的行时,它只是简单地删除最旧的行。

现在,一位数据库专家看着我的代码,他说这种方式效率不高,因为从数据库中删除一行是最耗费时间/内存/过程的操作,我应该不惜一切代价避免它。

他说我应该做的是,在我接触到MAX之后,重温一下最老的一行(更新)。(所以每次都是从上到下)

这意味着我需要保存一个单独的“标题”表,以保存当前指向最旧行的指针,并在每次插入时更新它(如果应用程序崩溃,我不想丢失它)。它真的更有效率吗?还有没有其他更有效的方法呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-07 03:34:22

把你的数据库表变成一个环形缓冲区是愚蠢的。如果你真的想使用这种方法...

不要使用数据库,只需使用数据文件和IO

  • In您的数据文件每条记录将是一个固定的size

      • Time StampLongitude

      • You可以使用数据的字符串格式或二进制表示形式,只要它们是固定的size.

就没关系。

-gps.dat

代码语言:javascript
复制
[Ring Pointer]
[Time Stamp][Latitude][Longitude]
[Time Stamp][Latitude][Longitude]
...
[Time Stamp][Latitude][Longitude]

  • 环指针是长整型
  • 的二进制表示形式首次创建文件时,会将其大小设置为LONG_INTEGER_SIZE +的大小(MAX_RECORDS *

当您想要添加记录时:

  • 读取从文件开头到文件开头的环形指针
  • 写入环形指针+1到文件开头(这样人们就不会混淆保持环形指针变量不变,只需将新值写回文件)
  • 转到位置LONG_INTEGER_SIZE +((环形指针% MAX_RECORDS) *将您的新记录放在该位置
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9579718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档