如何在大量无序数据中(实际应用中有几百万条数据吧),快速查找到自己所需的那几行数据(本人100%结贴率
具体需求是这样,
三维地球的动态加载(类似 Google earth),每在三维界面上操作一次,就获取一次屏幕四角坐标,以此来从数据源中获取数据。
我的考虑是 因为在三维界面上的操作很频繁 所以不能随时查询数据库,我就考虑把数据缓存到本地 xml文件中,
进入程序事件把xml读入 本机内存中的 dataset.
然后每一次操作 都开一个线程来遍历 dataset 查找所需数据。
问题是 数据量小的话 这样很好用。(我自己测试 10W级别左右 性能还行)
但是如果数据上 百万行 或者千万行的时间 该用什么样子的方式来 查找?
还有像明白 Google earth 的流加载方式是如何实现的。
大伙 帮忙讨论下 看看 有什么好的方法没。 共同提高
在现实应用中 太容易碰到 大量数据了。
[解决办法]
首先要提高查找效率就得依赖数据的有序性,这样可以跳过大量可确定不匹配的数据快速找到目标,如果你的数据是无序的,那只能通过遍历检查每一项来确定目标,复杂度O(n/2),所以还是要转换思维把本来无序的数据转成有序的
由于你是按坐标进行检索的,因此应该按坐标组织数据索引,这样至少能达到O(log2(n)),如果可以对坐标构建hash函数的话,那么用hash算法速度会更快
[解决办法]
把可能的操作范围内的数据预先缓存是个很好的想法,在前一次地图操作的基础上,下一次操作的范围基本上是可以预测的,就像CPU的cache一样,在保证命中率的情况下速度会很快
不过,如果你的应用服务器与数据库是同一台服务器的话,那么对数据库进行查询跟检索缓存都同样是消耗服务器资源,而且由于缓存检索算法的实现方式影响,并不一定会比直接查数据库快,毕竟数据库对检索算法专门做过优化的
如果应用服务器与数据库是分离的,那么可以考虑使用内存数据库引擎作为数据缓存
[解决办法]