我在间隔基础上存储数据(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)
>在该位置写下您的新记录