社区
工具平台和程序库
帖子详情
请教高手:内存中快速查找问题
ycbao
2003-09-29 10:53:29
我想将一大批ID号及信息放入内存,然后按ID号在内存中实现快速查询。请问:通过何种数据结构存放数据,查询起来最快?链表的查询操作好象显得有点慢。
...全文
42
22
打赏
收藏
请教高手:内存中快速查找问题
我想将一大批ID号及信息放入内存,然后按ID号在内存中实现快速查询。请问:通过何种数据结构存放数据,查询起来最快?链表的查询操作好象显得有点慢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiaoyunet
2003-11-20
打赏
举报
回复
你可以对数据库中的记录进行缓存,这样频繁访问的记录就可以在缓存中直接命中,至于缓存本身你可以用map或者hash-map,不用自己写,用现成的。还有一个问题就是如何控制缓存中数据和数据库的同步以及缓存容量的控制,需要你仔细考虑。
apogeecsj
2003-11-19
打赏
举报
回复
平衡查找树,b-树
rtdb
2003-11-19
打赏
举报
回复
楼主一开始没说清啊。
你若是有ORACLE, 记录还是千万级的,
那么最好的选择只能是在数据库中查询。
适当优化一下数据库, 用ID号作索引,
一般查询应该是可以控制在数秒内的。
自已写程序全部读入内存再查询, 肯定能再快一些,
但
1.你有那么多内存用么?
2.更新时如何同步?
geeksky
2003-11-19
打赏
举报
回复
hash_map
ycbao
2003-11-19
打赏
举报
回复
似乎没有我要的答案。在UNIX下,ID号存在上千万条记录,从数据库(ORACLE)中读我已嫌慢了,我要将这批ID通过某种方法放到内存,这样的背景下,我想寻找一种方法。还请高手指点。
lvcheng606717
2003-10-07
打赏
举报
回复
你既然在这里问,就用map好了
sdtea
2003-10-07
打赏
举报
回复
当然使用std::map了,有现成的不用,自己写是很费力的。
step_by_step
2003-10-07
打赏
举报
回复
具体问题具体分析,在我工作的过程中,我用的比较多的就是建立索引查找,速度很快
晨星
2003-10-01
打赏
举报
回复
vector就是动态数组,不需要事前知道元素个数的多少。
其实自己使用动态申请数组也完全可以呀,先用一条select count语句把元素的个数求出来,然后动态申请空间不就结了?
yhbttfile
2003-10-01
打赏
举报
回复
呵呵~~~
大家都很厉害。
其实,如果是你自己写搜索算法,则需要自己建立索引。索引怎样建立,就看你的查询条件是否是多条件还是单条件了。搜索算法我一般用折半查找,感觉比较快,也很容易实现。
如果你使用STL等库,则map等是你的比较好的选择,不过要实现多条件,map好像也很难实现了。
如果你们的项目里面有数据库支撑,则数据库的搜索算法则是很高效的。对于几十上百万的数据,处理还是没有问题的。
短歌如风
2003-10-01
打赏
举报
回复
一般我用list保存数据(主要是因为list的iterator保持有效的特点),然后用map/multimap<key_type, list<data_type>::iterator>作为索引,需要多少个索引就用多少个map。
对于复合条件检索的实现,应该先分解成多个简单条件的检索,得到一组list<data_type>::iterator的集合,然后用集合运算求解。
如果只需要按一种比较逻辑检索,也可以只使用map或multimap。
ycbao
2003-09-30
打赏
举报
回复
谢谢风雨交加!
RainWindy
2003-09-30
打赏
举报
回复
我对于std不熟,树也没怎么用过,我只是说说我的看法,假如是身份证,由于可能的数据太多,可能需要将身份证号再细分,比如前6位表示地区,后8位表示出身日期(也可能是6位),需要先建立一个前6位的索引(方法可以是线性表、树或其它),查找时首先查找这个索引记录,满足前6位,再从这个索引对应的库中查找。相当于每个人的身份记录都是保存在本地区,如果在其它地方查找,其实系统还是会到对应的地区查找一样。
不过实际中这个很复杂,主要是数据量太大。比如在深圳也有几百万人,一般都是采取后台为数据库,需要查找时发送指令到后台,由后台查找到后返回数据,至于这个数据我想应该是多级索引,这样就可以减少查询的次数。就比如身份证号一样,先建立一个按地区区分的索引(中国有两千多个县、市),再建立其它索引。如果是后台服务器,它还有多CPU功能,同时可以运行多个任务,还有缓冲区,存放经常使用的数据(首先在缓冲区中查找)
呵,我也不知道我在说什么,我不懂工程学
xhj10
2003-09-30
打赏
举报
回复
建立一个链表
djws
2003-09-29
打赏
举报
回复
试用一下这样的方法,创建一个链表,链表单元中的数据是定长数组。
例,要读x个ID号,创建链表的第一个单元,存放500个ID,读取过程中发现x>500,创第二个单元...
,这样创了((int)x/500)+1个单元,损失的内存空间在500字节以下
定长数组的值根据实际情况选取,但太大的话很难分配如此大的连续空间
aflyinghorse
2003-09-29
打赏
举报
回复
可以用vector
或者楼上map也不错
rtdb
2003-09-29
打赏
举报
回复
用map吧,快又好。
ycbao
2003-09-29
打赏
举报
回复
但ID号的数量是放在数据库中的,是不确定个数的
aflyinghorse
2003-09-29
打赏
举报
回复
用数组会很快,查询是常量时间的随机访问
ycbao
2003-09-29
打赏
举报
回复
to 风雨交加:
请教:如果ID号是很长的,如何建立ID号和地址对应的散列函数?比如18位的身份证号,
将每个身份证号对应的用户信息放入内存。怎样快速根据身份证号定位到存放数据的内存地址。树结构是否可行?请赐教。谢谢
加载更多回复(2)
干货分享:DBA专家门诊一期:索引与sql优化
问题
汇总
各位亲爱的云友, 非常感谢大家踊跃参加DBA专家门诊一期:索引与sql优化,很多云友都提出了自己的
问题
,门诊主任医师玄惭对大家提的
问题
一一作了解答。现已整理好这些
问题
,分享在此,欢迎来拿,绝对干货! 篇幅较长,耐心细看! 我们将赠送每位提问者每人一本凌云杂志第四期,请各位以论坛短消息形式将姓名、电话、地址发送给管理员xiaofanqie。 啊里新
C++ STL
中
哈希表 hash_map从头到尾详细介绍
目录(?)[+]0 为什么需要hash_map用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和
查找
功能。例如,我要记录一个人名和相应的存储,而且随时增加,要
快速
查找
和修改:岳不群-华山派掌门人,人称君子剑 张三丰-武当掌门人,太极拳创始人 东方不败-第一
高手
,葵花宝典 ...这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息,最傻的方法就是取...
干货分享:DBA专家门诊一期:索引与sql优化
问题
汇总(转)
各位亲爱的云友,非常感谢大家踊跃参加DBA专家门诊一期:索引与sql优化,很多云友都提出了自己的
问题
,门诊主任医师玄惭对大家提的
问题
一一作了解答。现已整理好这些
问题
,分享在此,欢迎来拿,绝对干货! 篇幅较长,耐心细看!我们将赠送每位提问者每人一本凌云杂志第四期,请各位以论坛短消息形式将姓名、电话、地址发送给管理员xiaofanqie。啊里新人(Q1):索引我一般...
一年成为Emacs
高手
(像神一样使用编辑器)
简介 成为
高手
很容易. 我初学Emacs时常忘记”退出”的快捷键, 一年后我完全掌握了Emacs. 一些文章强调Emacs有多牛, 但关于”如何做”则语焉不详. 即使涉及到”如何做”, 谈细节多而方法论少. 很多人花了大量时间”学习”Emacs却最终放弃,就是过于拘泥细节,而方法论上出了
问题
. 例如,背很少用到的快捷键会让初学者有很大的挫折感.花太多的时间,好不容易记住的快捷键很容易忘记.一个月勉强记住50个快捷键后算很厉害了.但是Emacs可以配置快捷键的命令近7000个.如果记住所有快捷键等同于掌握Em
我在CSDN参与的3000个帖子
今日偶然翻到,感慨万千 1:申述:版主,是否扣了我的专家分? 2:100分急求,随机输出十个小写字母,但是,要求这十个字母不相同 3:求Sn=a+aa+aaa+…+aaa…a(n个a)之值 4:数组题 望
高手
帮忙! 5:呵呵,来推荐一下我的网站,本站提供大量当今流行的免费的音乐和免费电影,常用软件、游戏、精美图库下载,希望对网友有帮助!顺便散分! 6:VBA
请教
怎
工具平台和程序库
24,854
社区成员
27,343
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章