2009-12-07 23 views
-1

我们有一个完全用C编写的应用程序。对于代码中的表访问,如从表中获取一些值,我们使用Pro * C。为了提高应用程序的性能,我们还预取了一些表来获取数据。我们采用一些输入字段,并从表中获取输出字段。表访问的性能

我们通常在表中有大约30000个条目,最多可以达到10万次。

但是,如果表项增加至约10万个条目,我觉得它危险地影响应用程序的性能。

我错了地方?如果它真的影响性能,有没有办法保持应用程序的性能稳定?

是什么,如果行的表增加到10万个考虑应用程序处理表的方式,可能的解决方法?

+1

什么是实际问题?你的问题真的很难理解。否则,你的问题的答案是“无法辨别,除非你使用探查器”。 – Sebastian 2009-12-07 09:30:33

+0

“十万”为100。000 in Indian English – MSalters 2009-12-07 10:09:29

+0

您正在从数据库复制1000万行到应用程序内存?假设你需要单行查询的数据,你确定你的代码比Oracle的代码快吗?只是总是使用SQL语句。哦......性能至关重要?如果您的程序使用您的代码需要0.03毫秒,使用Oracle代码的人需要注意3毫秒(100倍以上)? – pmg 2009-12-07 10:29:32

回答

0

如果不排序,你会得到的搜索时间成比例增加......如果你没有任何代码错误,在你的榜样(30K VS 1M)表,你会得到更大的33X搜索时间。我假设你正在逐渐迭代(i ++样式)表。

但是,如果某种程度上可以对表格进行排序,那么您可以大大缩短搜索时间。这是可能的,因为搜索排序信息的索引器算法不会解析每个元素,直到它到达所寻找的元素:它使用辅助表(树,散列等),通常搜索速度更快,然后它指出正确的搜索元素,或者至少对主表中的位置进行更仔细的估计。

当然,这会在有排序表的费用,或者当您插入或删除元素,或当你执行搜索。

+0

完全如果所有1000万条目将被预加载到memory.it将来载入7GB的数据进入内存,我不认为它的工作 – Vijay 2009-12-08 04:28:42

+0

所以这是两个不同的问题:内存和搜索时间。如果这是磁盘上的巨大数据(通过这种方式进行接缝,但纠正了我),那么通过将其加载到内存(它将由操作系统获取页面归档),您无法获得任何内容。也许你需要建立一个适合更快搜索的哈希表(取决于你的标准),并指向磁盘上的数据? – jpinto3912 2009-12-08 15:59:05

0

也许你可以去'谷歌散列',看看他们的实施?虽然它在C++

0

这可能是你有太多的高速缓存未命中,一旦你增加超过1MB或任何你的缓存大小为。

如果您多次迭代表格或随机访问元素,您也可以击中大量缓存未命中。

http://en.wikipedia.org/wiki/CPU_cache#Cache_Misses

0

嗯,这真的取决于你与数据做什么。如果你不得不把整个kit-and-kabootle加载到内存中,那么合理的做法是使用大的批量大小,这样需要发生的oracle往返次数很少。

如果你真的没有内存资源,让整个结果集被加载到内存中,然后大批量规模将仍然与Oracle的开销帮助。将合理大小的记录块存入内存,处理它们,然后获取下一个块。

没有关于您的实际运行时环境和业务目标的更多信息,这与任何人都可以获得的具体信息有关。

你能告诉我们更多关于这个问题吗?