以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  再提“大容量数据”的问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=4952)

--  作者:reachtone
--  发布时间:2009/11/12 9:36:00
--  再提“大容量数据”的问题
    昨天去给客户搞了大半天的数据迁移,老数据都已经移植到新库中了。其中,基础数据表的记录已经达到近150万条。
    现场用后台分组或交叉统计给客户测试了一下,瞬间即可得到结果,客户非常满意;加上随手即得的图表,统计这块没的说了!
    但是,在查询明细数据时,有个问题:只要数据超过8-10万条,系统性能就会急剧下降。关于这一点,我也早就预料到了,毕竟占用内存太大了嘛。因此,我在项目中专门设了个“关闭查询表”按钮,用于将窗口中的table重新fill成空记录。但是,尽管如此,项目操作还是很“卡”。
    刚才我一直想在这块进行改进,还发现:如果在窗口的table中加载过10万条以上的记录,再打开该窗口进行设计时,写代码都开始“卡”了。按说,该窗口重新打开后,原来的table已经自动销毁了,为什么还会这样呢?
    请老六考虑个办法,看看怎样才能彻底“关闭表”、以提高项目运行效率。
    还有就是,加载大容量数据时,等待时间太长,这点能否也考虑改进一下。我之前建议过“分页”方式,如果此方法不可行,能否借鉴一下BDB的做法。这个软件最初采取的就是一次全部加载方式,打开超大表时简直无法忍受;改进以后,就能马上看到数据、同时也有加载进度提示了,界面很友好。这是下载地址,请参考一下:http://www.bainsoft.com
    如果这个问题能解决,大家再测试我那个远程数据库时,查询过程就不会再有漫长的等待了。

--  作者:狐狸爸爸
--  发布时间:2009/11/12 9:40:00
--  
1、没必要加载10万行的
2、.net都是延迟销毁的
3、可以自己设计分页的:

http://www.foxtable.com/dispbbs.asp?boardid=2&Id=4949

在这个帖子的8楼
[此贴子已经被作者于2009-11-12 9:42:21编辑过]

--  作者:reachtone
--  发布时间:2009/11/12 9:47:00
--  
以下是引用狐狸爸爸在2009-11-12 9:40:00的发言:
1、没必要加载10万行的
2、.net都是延迟销毁的
3、可以自己设计分页的:

http://www.foxtable.com/dispbbs.asp?boardid=2&Id=4949

在这个帖子的8楼
[此贴子已经被作者于2009-11-12 9:42:21编辑过]

呵呵,已经看了,那个代码很好,正在研究。
但客户有时是需要查询这么多数据的。


--  作者:reachtone
--  发布时间:2009/11/12 9:49:00
--  
还是建议老六能参考一下bdb的数据加载方式,取人之长可以让foxtable更完美,呵呵。
--  作者:wcs
--  发布时间:2009/11/12 12:01:00
--  

客户想要加载100多万行,无非是想要查询统计一些数据。

最常见的查询数据是:某月某品种的量、某月某客户的量等。


你可以将这些统计结果保存在“统计表”中,直接调用就行了。因为历史的数据是不会变化的,有结账控制。

这样,所有的明细数据你就可以不加载了,在运行以后根据需要加载,比如你一定要查询某一条记录,你就用SQL查询吧。

还有一个建议:将你的那100多万条数据分一下期间,一年一个数据表。


--  作者:yangming
--  发布时间:2009/11/12 12:18:00
--  
以下是引用wcs在2009-11-12 12:01:00的发言:

客户想要加载100多万行,无非是想要查询统计一些数据。

最常见的查询数据是:某月某品种的量、某月某客户的量等。


你可以将这些统计结果保存在“统计表”中,直接调用就行了。因为历史的数据是不会变化的,有结账控制。

这样,所有的明细数据你就可以不加载了,在运行以后根据需要加载,比如你一定要查询某一条记录,你就用SQL查询吧。

还有一个建议:将你的那100多万条数据分一下期间,一年一个数据表。

同感,如果一年的数据量还很大,那就改成半年一个数据表,并按月份或季度做成统计表


--  作者:reachtone
--  发布时间:2009/11/12 12:26:00
--  
以下是引用yangming在2009-11-12 12:18:00的发言:

同感,如果一年的数据量还很大,那就改成半年一个数据表,并按月份或季度做成统计表

呵呵,没有必要的,sql数据库上千万条数据都没问题。
客户查询明细数据,出个几万条很正常。正在研究分页,这个问题也会解决的。


--  作者:reachtone
--  发布时间:2009/11/12 12:30:00
--  
以下是引用hnaysx在2009-11-12 12:24:00的发言:

提议:是否可以边加载边显示,比如加载了1万行就先显示1万行,然后继续在显示的过程中继续加载,继续显示。

bdb就是这么处理的。不知老六会否参考一下这样的做法。
bdb是个很棒的数据库管理工具,在没用foxtable之前,我都是用它管理数据库的。虽然网站是英文的,但软件是中文的。您可以下载一个试用看看。
非常希望老六能参考一下。

[此贴子已经被作者于2009-11-12 12:31:51编辑过]

--  作者:菜鸟foxtable
--  发布时间:2009/11/12 12:42:00
--  
以下是引用reachtone在2009-11-12 12:30:00的发言:

bdb就是这么处理的。不知老六会否参考一下这样的做法。
bdb是个很棒的数据库管理工具,在没用foxtable之前,我都是用它管理数据库的。虽然网站是英文的,但软件是中文的。您可以下载一个试用看看。
非常希望老六能参考一下。

[此贴子已经被作者于2009-11-12 12:31:51编辑过]

图片点击可在新窗口打开查看似乎可以用来进行数据库建模?

[此贴子已经被作者于2009-11-12 12:42:02编辑过]

--  作者:狐狸爸爸
--  发布时间:2009/11/12 12:42:00
--  
没必要这么复杂的,关键不是加载速度,而是超过一定行数后处理速度下降。
有了动态加载、分业加载,后台统计,没有什么难度的了,啥任务不能处理啊。

我做成这样的了,加载第三页,每页10行:


DataTables("订单").LoadTop = "10"
DataTables("订单").LoadPage = "3"
DataTables("订单").LoadOrder = "[_Identify]"
DataTables("订单").Load

[此贴子已经被作者于2009-11-12 12:43:06编辑过]