上万条数据, 短时间内连续查询几千次, 是数据库查, 还是内存查更好一点?

248 天前
 bthulu

客户库存有一万多, 要将这一万多库存按客户要求分散到几百个工位上, 需要针对库存的多个属性进行多次查询, 循环里套循环, 能查上千次甚至更多.

这种情况下, 我是直接数据库查, 还是将数据一次全拉到内存, 在内存里查更好?

数据库查可以走索引, 内存里可就没索引查一次就是全量遍历一次了. 如果有内存里支持索引的列表就好了. 语言是.net8.

别说什么优化查询方案一次查询搞定的了, 这不可能. 现实业务就是各个工位之间关系也是错综复杂, 只能这样查了.

9159 次点击
所在节点    数据库
76 条回复
wxf666
248 天前
全读出来,存到 HashMap 里,不也相当于有索引了吗?

Chad0000
248 天前
就这么点儿数据,内存里面就算没索引也是比数据库快很多。
bthulu
248 天前
@wxf666 这个你咋存? 比如某个属性 width, 范围从 800, 850, 900, 一直到 3000. width=800 的几十条, width=850 的有几条, width=900 的又有几十条, 咋个存到 hashmap 里去?

难道按 id 作为 key 存进去? 问题是我这查询条件没有一个地方用到 id, 都是根据属性查的.
me1onsoda
248 天前
财大气粗就用内存呗
bthulu
248 天前
@Chad0000 问题是不走索引每次都是遍历啊.

比如 1 万条查 1 千次, 平均每次查出来 10 条数据, 对于有索引来说, 每次查询只需要定位最大值和最小值, 然后将中间的依次取出即可. 那 10 条数据走一次索引, 接触到的数据可能还不到 20 条. 一千次就是 2 万条.

如果走内存遍历, 查一次就是接触 1 万条数据. 一千次就是一千万条

也就是数据库多了一千次 IO, 但少遍历了 998 万条数据.
xmumiffy
248 天前
存成二维数组就行,不过几万条你直接遍历也没事,内存遍历也比走网络查数据库快多了
Chad0000
248 天前
@bthulu
数据就在你手头上,直接定义 c#数组加.where 跑跑试试呗。
q727729853
248 天前
直接查库,也不用判断索不索引的。那么丁点数据,有啥问题?
macaodoll
248 天前
几万条,直接内存呗。这才多大点
raycool
248 天前
几万条内存不随便放么。
wxf666
248 天前
@bthulu #3 键是宽度值,值是(库存 ID/引用/指针/…)数组?

或者,你也模仿数据库的底层存储结构,内存里也用 B 树存储呗。。
scys
248 天前
一万条数据?不会增加和减少?
那就全部内存,直接正则匹配即可,快到让你怀疑人生。
yufeng0681
248 天前
描述里面的 很短时间也没说清楚,
1 、 能不能平均到 每秒多少次 sql 查询
2 、是几百个终端近乎同时发起查询?有这么高频的查询
3 、mysql 支持读写分离,有没有额外机器给你弄同步数据库用于查询

讲原始需求会好很多,方案都可能变掉,比如用 redis 先查一部分,然后再去 mysql 里面查更详细信息。(瞎举例)
bthulu
248 天前
@yufeng0681 不需要每秒查询, 无并发. 就一个定时任务, 每 30 秒左右执行一次, 执行时间尽量控制在几百毫秒内. mysql 就普通电脑, 这是工业用的, 不存在读写分离什么的, 就一普通家用 dell PC 机上运行.
inframe
248 天前
Mysql 内存缓冲区写大点比如实际上库 10G 、PoolSize 64G ,数据库整个就自动放进内存里了
devliu1
248 天前
@bthulu 这个量你怎么做都行
huijiewei
248 天前
你猜为啥 Redis 要放内存里面

只要内存没爆,就全放内存肯定不会错
wanguorui123
248 天前
拉到本地存 SQLite 在查询 SQLite 里的数据库快很多,SQLite 充当一级缓存
ivvei
248 天前
用数据库查啊,这么点量会很慢吗?用数据库查实现起来多简单啊。建议先按数据库写,实测不行了再想优化方案。
mark2025
248 天前
把数据库放到内存中……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1032362

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX