如何在大量无序数据中(实际应用中有几百万条数据吧),快速查找到自己所需的那几行数据(本人100%结贴率

xuanlv123 2010-01-28 05:34:50
具体需求是这样,
三维地球的动态加载(类似 Google earth),每在三维界面上操作一次,就获取一次屏幕四角坐标,以此来从数据源中获取数据。

我的考虑是 因为在三维界面上的操作很频繁 所以不能随时查询数据库,我就考虑把数据缓存到本地 xml文件中,
进入程序事件把xml读入 本机内存中的 dataset.

然后每一次操作 都开一个线程来遍历 dataset 查找所需数据。

问题是 数据量小的话 这样很好用。(我自己测试 10W级别左右 性能还行)

但是如果数据上 百万行 或者千万行的时间 该用什么样子的方式来 查找?

还有像明白 Google earth 的流加载方式是如何实现的。

大伙 帮忙讨论下 看看 有什么好的方法没。 共同提高
在现实应用中 太容易碰到 大量数据了。
...全文
3030 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
todaylxp 2010-04-10
  • 打赏
  • 举报
回复 1
R+树对付5维一些的数值检索还是比较有效的。

不过没看清需求-猜想如果是根据三维坐标去查找相应点信息,可以将树存储于缓存中,带指针指向磁盘中的点信息
超级大笨狼 2010-04-09
  • 打赏
  • 举报
回复 1
1,MemCache ==分布式Hash.
2,常用搜索要观察规律,建立索引机制,能直接用Key搜索复杂度是O(1),瞬间立得.
3,实在是需要遍历,建立一个二叉查找树,根据业务压力情况部署在不同机器上.
hsb1132 2010-02-21
  • 打赏
  • 举报
回复 1
依赖数据的有序性做分布式处理
哈特比尔波 2010-02-04
  • 打赏
  • 举报
回复 1
树型索引,当年雅虎的模式。估计能行,因为坐标的个数就那么多个。
  • 打赏
  • 举报
回复 1
既然要随机快速访问,而没有要求遍历,考虑用hash来做吧。

千万级别的数据,很考验hash冲突机制了。

或者考虑用查找树来做,红黑树可以,除去维护平衡的操作,查找效率接近O(logN)。

综合起来,红黑树比较合适。

Java2King 2010-01-31
  • 打赏
  • 举报
回复 1
千万级别的数据,写个链式hash也可以,效果也不错,也可以用B+树。
sandy8877 2010-01-30
  • 打赏
  • 举报
回复 1
是啊,这么大的数据,应该分级处理.
Java2King 2010-01-29
  • 打赏
  • 举报
回复 1
[Quote=引用 1 楼 bomdy 的回复:]
首先要提高查找效率就得依赖数据的有序性,这样可以跳过大量可确定不匹配的数据快速找到目标,如果你的数据是无序的,那只能通过遍历检查每一项来确定目标,复杂度O(n/2),所以还是要转换思维把本来无序的数据转成有序的

由于你是按坐标进行检索的,因此应该按坐标组织数据索引,这样至少能达到O(log2(n)),如果可以对坐标构建hash函数的话,那么用hash算法速度会更快


[/Quote]
同上
给坐标建立索引
zhongkouwei 2010-01-29
  • 打赏
  • 举报
回复 1
hash表应该最快,不过,上千万,缓存文件这么大,内存够用不。。。分布式?
bomdy 2010-01-28
  • 打赏
  • 举报
回复 1
把可能的操作范围内的数据预先缓存是个很好的想法,在前一次地图操作的基础上,下一次操作的范围基本上是可以预测的,就像CPU的cache一样,在保证命中率的情况下速度会很快

不过,如果你的应用服务器与数据库是同一台服务器的话,那么对数据库进行查询跟检索缓存都同样是消耗服务器资源,而且由于缓存检索算法的实现方式影响,并不一定会比直接查数据库快,毕竟数据库对检索算法专门做过优化的

如果应用服务器与数据库是分离的,那么可以考虑使用内存数据库引擎作为数据缓存
bomdy 2010-01-28
  • 打赏
  • 举报
回复 1
首先要提高查找效率就得依赖数据的有序性,这样可以跳过大量可确定不匹配的数据快速找到目标,如果你的数据是无序的,那只能通过遍历检查每一项来确定目标,复杂度O(n/2),所以还是要转换思维把本来无序的数据转成有序的

由于你是按坐标进行检索的,因此应该按坐标组织数据索引,这样至少能达到O(log2(n)),如果可以对坐标构建hash函数的话,那么用hash算法速度会更快

2,760

社区成员

发帖
与我相关
我的任务
社区描述
搜索引擎的服务器通过网络搜索软件或网络登录等方式,将Internet上大量网站的页面信息收集到本地,经过加工处理建立信息数据库和索引数据库。
社区管理员
  • 搜索引擎技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧