嵌入式技术论坛
直播中

最强海贼王

8年用户 1377经验值
擅长:MEMS/传感技术
私信 关注
[问答]

门禁卡数据存储和检索请问有啥优化的办法能提高到一秒以内?

一个项目上需要存储大量门禁卡数据并作检索(三万张卡)
每个卡为十位十进制数。
用spi nor flash做外置存储。。现在发现最坏情况下,三万张卡检索一次需要4-6秒钟。。请问有啥优化的办法能提高到一秒以内。。。

谢谢

回帖(9)

世态薄凉

2023-5-17 10:15:47
1.SPI速度
2.SPI DMA + 双缓存 + 乒乓模式
3.找到数据中的一个属性( 比如开卡日期 用户名首字母)或者数据加入一个头 NorFlash按其分区 减少匹配的数据量

方式2 比较麻烦 依赖硬件
方式3 逻辑性强 数据分区 按你的需求 分4个区以上可以实现

不知道还有没有好的方法 这是我目前对于大数据量的处理方式
举报

最强海贼王

2023-5-17 10:15:55
感谢,

1, spi速度, 已经跑50M了。。芯片最大值支持50M
2, 之前考虑用flashdb, 不过感觉超过2K的数据好像不适合,速度会变慢非常多。
我现在用的是littlefs,想利用一下lfs的掉电保护。。。 您指的卡数据加一个头是啥意思?能具体点嘛。
您指的是按照卡十位卡数据的某几位来做flash分区的索引吗? 十位的数据有一百亿条。。感觉有点大.

目前的一个想法,用哈希函数把卡均匀地分布在100个文件里,然后单独查每个文件,不过没想出来这个哈希函数怎么算..
不知道各位过来人的经验。。

谢谢
举报

世态薄凉

2023-5-17 10:16:04
你再看看 找到数据中的一个属性 比如开卡日期 用户名首字母 等等
举报

世态薄凉

2023-5-17 10:16:09
你的目的是不是就是为了1秒钟之内匹配上数据?
举报

最强海贼王

2023-5-17 10:16:15
数据里面就只有 10位卡号,有效期(大概率相同)..
我加一个属性存进去,如何只通过10位卡号来快速索引呢..除非这个属性和卡号有相关性..

是的,就是为了提速。。
举报

大懒猫54

2023-5-17 10:41:46
把卡的物理ID按照区块划分范围,比如按照数字顺序,每256个划为一个区块(实际大小可以按照存储设备页来划分)。检索到卡ID时,按照物理ID先计算出所在区块,然后再区块中检索匹配的数据。这样会变得快一些。其实就是参照数据库中SQL检索语句的操作方式优化数据的组织。又比如,3万个卡,如果卡的ID是连续的,可以根据ID值,按照某个计算公式,直接定位到他所在的信息存储位置;如果ID不是连续的,那么也可以按照除以某个数值获得的余或者商来划分区块,可以快速定位所在区块。然后在区块里按照数值大小快速定位所在位置。
举报

大懒猫54

2023-5-17 10:54:50
还有一种处理方式,就是把卡信息数据保存在其它计算机设备上。当嵌入设备扫描到卡号后,把卡号传递给计算机(上位机),上位机使用数据库方式保存所有的卡信息,利用SQL数据局库查询获取对应的数据。然后返给嵌入式设备。
举报

大懒猫54

2023-5-17 11:01:02
具体处理时,最好参照卡的物理ID号来进行。对于有固定的范围、号码连续的是一种方式,这种完全可以使用嵌入式设备来处理。如果是随机不连续的,可以使用计算公式以区块方式存储、查找。或者直接由计算机数据库方式存储、查找。
举报

大懒猫54

2023-5-17 11:48:14
如果设备能和上位计算机通讯的话,把卡的ID号传递给上位机,上位机上使用数据库检索方式查找对应的信息。,再返回给嵌入式设备。这样的处理速度应该也很快。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分