OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4614|回复: 9

flash存储上万条记录,有什么办法可以快速检索

[复制链接]

9

主题

219

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1434
金钱
1434
注册时间
2020-5-12
在线时间
394 小时
发表于 2020-8-25 10:00:23 | 显示全部楼层 |阅读模式
5金钱
目前需要在flash里面存储最少10k条名单记录,如何快速从10K条记录里面找到对应的一条。每个名单都有一个ID(32字节的),ID是无序的。想问下大家有什么好的方法,除了遍历。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

87

帖子

0

精华

高级会员

Rank: 4

积分
887
金钱
887
注册时间
2018-4-20
在线时间
491 小时
发表于 2020-8-25 10:26:11 | 显示全部楼层
回复

使用道具 举报

5

主题

269

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1053
金钱
1053
注册时间
2020-5-11
在线时间
253 小时
发表于 2020-8-25 10:32:41 | 显示全部楼层
本帖最后由 thisisdemo 于 2020-8-25 10:41 编辑

有好多基于flash的kv库驱动。你可以借鉴他们怎么搞的。或者直接使用这种kv库。 我接触过的 Tencent os tiny有kv库。还有个easyflash。推荐看看easyflash。裸机应该也可以移植用。https://github.com/armink/EasyFlash
我使用的时候倒是达到过上千这个数量级。你可以试试10k这个量级怎么样。我刚刚翻看他们源码。没仔细看,他们应该也是循环解决的。


微信截图_20200825104008.png
回复

使用道具 举报

9

主题

219

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1434
金钱
1434
注册时间
2020-5-12
在线时间
394 小时
 楼主| 发表于 2020-8-25 11:03:38 | 显示全部楼层
本帖最后由 叶子君 于 2020-8-25 11:09 编辑
thisisdemo 发表于 2020-8-25 10:32
有好多基于flash的kv库驱动。你可以借鉴他们怎么搞的。或者直接使用这种kv库。 我接触过的 Tencent os tiny ...

easyflash 我移植过了。数量越大 读取也慢。我测试过2000条数据,插入第2001条,耗时接近1S多了。我研究过了实现方式,用的也是遍历查重。图片还是我在GitHub上问的贴的实验结果。
0adf80f1b66db9695902a395fa61b86.png
回复

使用道具 举报

9

主题

219

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1434
金钱
1434
注册时间
2020-5-12
在线时间
394 小时
 楼主| 发表于 2020-8-25 11:11:06 | 显示全部楼层

再加个fatfs文件系统吗?
回复

使用道具 举报

2

主题

459

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4498
金钱
4498
注册时间
2018-5-14
在线时间
962 小时
发表于 2020-8-25 11:23:53 | 显示全部楼层
在记录名单的时候再创建一张有序的索引表呗,从有序索引表获取到无序名单的位置,然后直接去那个位置取。
回复

使用道具 举报

5

主题

269

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1053
金钱
1053
注册时间
2020-5-11
在线时间
253 小时
发表于 2020-8-25 11:29:56 | 显示全部楼层
叶子君 发表于 2020-8-25 11:03
easyflash 我移植过了。数量越大 读取也慢。我测试过2000条数据,插入第2001条,耗时接近1S多了。我研究 ...

嗯呢 那看来这个就不能符合你的要求了。研究研究用其他算法解决吧。  
回复

使用道具 举报

9

主题

219

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1434
金钱
1434
注册时间
2020-5-12
在线时间
394 小时
 楼主| 发表于 2020-8-25 11:45:45 | 显示全部楼层
本帖最后由 叶子君 于 2020-8-25 11:47 编辑
姚先起 发表于 2020-8-25 11:23
在记录名单的时候再创建一张有序的索引表呗,从有序索引表获取到无序名单的位置,然后直接去那个位置取。

无序的范围是0-0xFFFFFFFF啊。这个索引表有点大了.用算法换算的话,例如hash的话,都会有冲突的概率。
回复

使用道具 举报

12

主题

3397

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8669
金钱
8669
注册时间
2020-5-11
在线时间
4132 小时
发表于 2020-8-25 13:11:55 | 显示全部楼层
我不了解这个,但是我觉得还是应当按ID排个序,或者做一个目录能按顺序查找,然后利用二分法快速查找。
https://www.cnblogs.com/cs-whut/p/11212022.html
专治疑难杂症
回复

使用道具 举报

0

主题

87

帖子

0

精华

高级会员

Rank: 4

积分
887
金钱
887
注册时间
2018-4-20
在线时间
491 小时
发表于 2020-8-25 15:01:10 | 显示全部楼层
单独开辟空间只保存id作为目录,查找时遍历目录查找id,按照id的地址对应名单的地址;或者用id+名单地址作为目录,目录按id排序,二分法查找
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 15:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表