楼主: 〇〇

[有奖问答] 用过程语言实现group by cube的代码挑战赛

[复制链接]
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
31#
 楼主| 发表于 2010-2-25 20:36 | 只看该作者
我也遇上了笔记本比服务器快的事件,但毫秒级不多

lenovo t61
453ms,recn=152760
547ms,recn=234600,c1=-1,c2=127,c3=127,c4=127,count=1000000,sum=500000500000

hp dl360
483ms,recn=152760
577ms,recn=234600,c1=-1,c2=127,c3=127,c4=127,count=1000000,sum=500000500000

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
32#
发表于 2010-2-25 22:10 | 只看该作者
OO把全部身家贡献出来,再到其他开发版去吆喝几声,看看有没有人来玩。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
33#
 楼主| 发表于 2010-2-26 14:11 | 只看该作者
增加
#define __int64 long long
在aix 6.1 gcc 4.2上完成但打印longlong有问题
把%I64d改成%lld通过

# g++ -O2 map3.cpp
map3.cpp:198:2: warning: no newline at end of file
ld: 0711-224 WARNING: Duplicate symbol: .__divdi3
ld: 0711-224 WARNING: Duplicate symbol: .__moddi3
ld: 0711-224 WARNING: Duplicate symbol: .__udivdi3
ld: 0711-224 WARNING: Duplicate symbol: .__umoddi3
ld: 0711-224 WARNING: Duplicate symbol: .__udivmoddi4
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
# ./a.out
348766ms,recn=152760
0.373871ms,recn=234600,c1=-1,c2=127,c3=127,c4=127,count=1000000,sum=500000500000

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
34#
 楼主| 发表于 2010-2-26 14:52 | 只看该作者
把记录数增加1倍

# ./a.out
864028ms,recn=152760
0.479483ms,recn=234600,c1=-1,c2=127,c3=127,c4=127,count=2000000,sum=2000001000000

D:\app>map3
936ms,recn=152760
0.639000ms,recn=234600,c1=-1,c2=127,c3=127,c4=127,count=2000000,sum=-1453759936
产生第一层的时间增加,后面其他分组组合没有增加时间不变

再比较sql
SQL> drop table t purge;

表已删除。

SQL> create table t as select  mod(level,4)c1,mod(level,5)c2,mod(level,67)c3,
  2  mod(case when mod(level,13)>0 then level end ,113)c4, level v from dual connect by level<=2E6;

表已创建。

SQL> set timi on
SQL> drop table tcube  purge;

表已删除。

已用时间:  00: 00: 00.04
SQL> create table tcube as select c1,c2,c3,c4,sum(v)sv,count(v)cv,grouping_id(c1,c2,c3,c4)gid from t group by cube(c1,c2,c3,c4);

表已创建。

已用时间:  00: 00: 10.31
SQL> create table tncube as select c1,c2,c3,c4,sum(v)sv,count(v)cv,grouping_id(c1,c2,c3,c4)gid from t group by c1,c2,c3,c4;

表已创建。

已用时间:  00: 00: 02.55
SQL> drop table tcube  purge;

表已删除。

已用时间:  00: 00: 00.01
SQL> create table tcube as select c1,c2,c3,c4,sum(v)sv,count(v)cv,grouping_id(c1,c2,c3,c4)gid from t group by cube(c1,c2,c3,c4);

表已创建。

已用时间:  00: 00: 09.39
cube比没有cube多6
SQL>
SQL> select count(*)from tncube;

  COUNT(*)
----------
    152760

已用时间:  00: 00: 00.12
SQL> select count(*)from tcube;

  COUNT(*)
----------
    234600

已用时间:  00: 00: 00.17
SQL> select * from tcube where gid=15;

        C1         C2         C3         C4         SV         CV        GID
---------- ---------- ---------- ---------- ---------- ---------- ----------
                                            2.0000E+12    2000000         15

已用时间:  00: 00: 00.03

所以,sql cube的速度不如C

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
35#
 楼主| 发表于 2010-2-26 15:06 | 只看该作者
再增加1倍,cube和第一层还是差6秒,怀疑又是精度造成的
SQL> create table t as select  mod(level,4)c1,mod(level,5)c2,mod(level,67)c3,
  2  mod(case when mod(level,13)>0 then level end ,113)c4, level v from dual connect by level<=2E6;

表已创建。

已用时间:  00: 00: 16.11
SQL> insert into t select  mod(level,4)c1,mod(level,5)c2,mod(level,67)c3,
  2  mod(case when mod(level,13)>0 then level end ,113)c4, level+2E6 v from dual connect by level<=2E6;

已创建2000000行。

已用时间:  00: 00: 12.46
SQL> create table tncube as select c1,c2,c3,c4,sum(v)sv,count(v)cv,grouping_id(c1,c2,c3,c4)gid from t group by c1,c2,c3,c4;

表已创建。

已用时间:  00: 00: 05.30
SQL> create table tcube as select c1,c2,c3,c4,sum(v)sv,count(v)cv,grouping_id(c1,c2,c3,c4)gid from t group by cube(c1,c2,c3,c4);

表已创建。

已用时间:  00: 00: 11.56

D:\app>map3
1700ms,recn=152760
0.593000ms,recn=234600,c1=-1,c2=127,c3=127,c4=127,count=4000000,sum=-1522072448

# ./a.out
1675592ms,recn=152760
0.469210ms,recn=234600,c1=-1,c2=127,c3=127,c4=127,count=4000000,sum=8000002000000

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
36#
 楼主| 发表于 2010-2-26 15:12 | 只看该作者
第一层好像就是精度引起的,后面其他组合还是没有变化
SQL> desc t
名称                                      是否为空? 类型
----------------------------------------- -------- ----------------------------
C1                                                 NUMBER
C2                                                 NUMBER
C3                                                 NUMBER
C4                                                 NUMBER
V                                                  NUMBER

SQL> drop table t purge;

表已删除。

已用时间:  00: 00: 00.04
SQL> create table t(c1 number(1,0),c2 number(1,0),c3 number(2,0),c4 number(3,0),v number(8,0));

表已创建。

已用时间:  00: 00: 00.00

SQL> desc t
名称                                      是否为空? 类型
----------------------------------------- -------- ----------------------------
C1                                                 NUMBER(1)
C2                                                 NUMBER(1)
C3                                                 NUMBER(2)
C4                                                 NUMBER(3)
V                                                  NUMBER(8)

SQL> insert into t select  mod(level,4)c1,mod(level,5)c2,mod(level,67)c3,
  2  mod(case when mod(level,13)>0 then level end ,113)c4, level v from dual connect by level<=2E6;

已创建2000000行。

已用时间:  00: 00: 10.67
SQL> insert into t select  mod(level,4)c1,mod(level,5)c2,mod(level,67)c3,
  2  mod(case when mod(level,13)>0 then level end ,113)c4, level+2E6 v from dual connect by level<=2E6;

已创建2000000行。

已用时间:  00: 00: 13.71
SQL> drop table tcube purge;

表已删除。

已用时间:  00: 00: 00.09
SQL> drop table tncube purge;

表已删除。

已用时间:  00: 00: 00.40
SQL> create table tncube as select c1,c2,c3,c4,sum(v)sv,count(v)cv,grouping_id(c1,c2,c3,c4)gid from t group by c1,c2,c3,c4;

表已创建。

已用时间:  00: 00: 03.16
SQL>
SQL> create table tcube as select c1,c2,c3,c4,sum(v)sv,count(v)cv,grouping_id(c1,c2,c3,c4)gid from t group by cube(c1,c2,c3,c4);

表已创建。

已用时间:  00: 00: 10.68
SQL>
SQL>

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
37#
 楼主| 发表于 2010-2-26 15:20 | 只看该作者
在4百万行
newkid的plsql从14.71秒到

PL/SQL 过程已成功完成。

已用时间:  00: 00: 41.80

使用道具 举报

回复
论坛徽章:
69
生肖徽章2007版:羊
日期:2008-11-14 14:42:19复活蛋
日期:2011-08-06 08:59:05ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主4段
日期:2012-05-15 15:24:11
38#
发表于 2010-2-26 17:48 | 只看该作者

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
39#
 楼主| 发表于 2010-2-27 11:27 | 只看该作者
每个分组取值增加,汇总行数增加,时间增加

  1. /* compiled by cl of vc2003*/
  2. #include <time.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <map>
  6. #include <iostream>
  7. #define add_key {if((key_recn.find(key))== key_recn.end())key_recn[key]=c++;}
  8. #define addkey {if((key_recn2.find(key))== key_recn2.end())key_recn2[key]=c++;}
  9. #define __int64 long long
  10. using namespace std;
  11. struct ltstr
  12. {
  13.   bool operator()(const char* s1, const char* s2) const
  14.   {
  15.     return strcmp(s1, s2) < 0;
  16.   }
  17. };
  18. struct ltint
  19. {
  20.   bool operator()(const int s1, const int s2) const
  21.   {
  22.     return (s1<s2) ;
  23.   }
  24. };
  25. int main()
  26. {
  27. int s[3][3]={ {4,5,67},{9,19,109},{9,97,119}};
  28. //printf("%d,%d",t[0][1],t[1][2]);
  29. //return 0;
  30. for(int r=0;r<3;r++)
  31. {       
  32. long t=clock();
  33. printf("%d,%d,%d,114,%d\n",s[r][0],s[r][1],s[r][2],s[r][0]*s[r][1]*s[r][2]*114);       
  34. char* c1=(char*)malloc(1E6L);
  35. char* c2=(char*)malloc(1E6L);
  36. char* c3=(char*)malloc(1E6L);
  37. char* c4=(char*)malloc(1E6L);
  38. int*  v1=(int* )malloc(4E6L);

  39. printf("申请源表内存%dms\n",clock()-t);
  40. t=clock();

  41. __int64* v2;//store sum(v1);

  42. for (int i=0;i<1E6L;i++)
  43. {
  44.         int j=i+1;
  45.         c1[i]=j%s[r][0];
  46.         c2[i]=j%s[r][1];
  47.         c3[i]=j%s[r][2];
  48.         c4[i]=(j%13?j%113:127);
  49.         v1[i]=j;
  50. }


  51. map<const int, int, ltint> key_recn;
  52. map<const int, int, ltint> key_recn2;
  53. int c=0;
  54. printf("填充源表数据%dms,recn=%d,每毫秒%d行\n",clock()-t,c,(long)1E6/(clock()-t));
  55. t=clock();

  56. for (int i=0;i<1E6L;i++)
  57. {
  58.         int key=(c1[i]<<24)+(c2[i]<<16)+(c3[i]<<8)+c4[i];
  59.         //printf("key=%d\n",key);
  60.         add_key;

  61. }

  62. printf("新建一层节点%dms,recn=%d,每毫秒读%d行,每毫秒写%d节点\n",clock()-t,c,(long)1E6/(clock()-t),c/(clock()-t));
  63. t=clock();
  64. int *C=(int*)malloc(c*4);//store count(c1)
  65. int *k=(int*)malloc(c*4);//store key

  66. v2=(__int64*)malloc(c*8);

  67. memset(C,0,c*4); //need?
  68. memset(v2,0,c*8);
  69. printf("申请一层内存%dms\n",clock()-t);
  70. t=clock();


  71. for (int i=0;i<1E6L;i++)
  72. {
  73. int recn=key_recn[(c1[i]<<24)+(c2[i]<<16)+(c3[i]<<8)+c4[i]];
  74. k[recn]=(c1[i]<<24)+(c2[i]<<16)+(c3[i]<<8)+c4[i];
  75. C[recn]++;
  76. v2[recn]=v2[recn]+v1[i];

  77. }
  78. printf("写入一层数据%dms,recn=%d,每毫秒读%d行,每毫秒写%d行\n",clock()-t,c,(long)1E6/(clock()-t),c/(clock()-t));
  79. t=clock();
  80. int c_2=c;
  81. for (int i=0;i<c_2;i++)
  82. {
  83.         int key=(k[i]&0xFFFFFF)+((0x80+15)<<24);//set c1 null ,gid=8
  84.         addkey;

  85.         key=(k[i]&0xFF00FFFF)+((0x40)<<24)+(127<<16);//set c2 null,gid=4
  86.         addkey;

  87.         key=(k[i]&0xFFFF00FF)+((0x20)<<24)+(127<<8);//set c3 null,gid=2
  88.         addkey;

  89.         key=(k[i]&0xFFFFFF00)+((0x10)<<24)+(127);//set c4 null,gid=1
  90.         addkey;

  91.         key=(k[i]&0xFFFF00)+((0x90+15)<<24)+(127);//set c1,c4 null ,gid=9
  92.         addkey;

  93.         key=(k[i]&0xFF00FF00)+((0x50)<<24)+(127<<16)+(127);//set c2,c4 null,gid=5
  94.         addkey;

  95.         key=(k[i]&0xFFFF0000)+((0x30)<<24)+(127<<8)+(127);//set c3,c4 null,gid=3
  96.         addkey;

  97.         key=(k[i]&0xFF0000FF)+((0x60)<<24)+(127<<16)+(127<<8);//set c2,c3 null,gid=6
  98.         addkey;

  99.         key=(k[i]&0x00FF00FF)+((0xA0+15)<<24)+(127<<8);//set c1,c3 null,gid=10
  100.         addkey;

  101.         key=(k[i]&0xFFFF)+((0xC0+15)<<24)+(127<<16);//set c1,c2 null,gid=12
  102.         addkey;

  103.         key=(k[i]&0xFF00)+((0xD0+15)<<24)+(127<<16)+(127);//set c1,c2,c4 null,gid=13
  104.         addkey;

  105.         key=(k[i]&0xFF)+((0xE0+15)<<24)+(127<<16)+(127<<8);//set c1,c2,c3 null,gid=14
  106.         addkey;

  107.         key=(k[i]&0xFF0000)+((0xB0+15)<<24)+(127<<8)+(127);//set c1,c3,c4 null,gid=11
  108.         addkey;

  109.         key=(k[i]&0xFF000000)+((0x70)<<24)+(127<<16)+(127<<8)+(127);//set c2,c3,c4 null,gid=7
  110.         addkey;

  111.         key=((0xF0+15)<<24)+(127<<16)+(127<<8)+(127);//set c1,c2,c3,c4 null,gid=15
  112.         addkey;
  113. }
  114. printf("新建后面节点%dms,recn=%d,每毫秒读%d行key,每毫秒写%d节点\n",clock()-t,c,c_2/(clock()-t),(c-c_2)/(clock()-t));
  115. t=clock();

  116. int mask[15]={
  117. 0x00FFFFFF,
  118. 0xFF00FFFF,
  119. 0xFFFF00FF,
  120. 0xFFFFFF00,
  121. 0x00FFFF00,
  122. 0xFF00FF00,
  123. 0xFFFF0000,
  124. 0xFF0000FF,
  125. 0x00FF00FF,
  126. 0x0000FFFF,
  127. 0x0000FF00,
  128. 0x000000FF,
  129. 0x00FF0000,
  130. 0xFF000000,
  131. 0x00000000};

  132. int null[15]={
  133. ((0x80+15)<<24),
  134. ((0x40)<<24)+(127<<16),
  135. ((0x20)<<24)+(127<<8),
  136. ((0x10)<<24)+(127),
  137. ((0x90+15)<<24)+(127),
  138. ((0x50)<<24)+(127<<16)+(127),
  139. ((0x30)<<24)+(127<<8)+(127),
  140. ((0x60)<<24)+(127<<16)+(127<<8),
  141. ((0xA0+15)<<24)+(127<<8),
  142. ((0xC0+15)<<24)+(127<<16),
  143. ((0xD0+15)<<24)+(127<<16)+(127),
  144. ((0xE0+15)<<24)+(127<<16)+(127<<8),
  145. ((0xB0+15)<<24)+(127<<8)+(127),
  146. ((0x70)<<24)+(127<<16)+(127<<8)+(127),
  147. ((0xF0+15)<<24)+(127<<16)+(127<<8)+(127)
  148. };


  149. int *C2=(int*)malloc((c-c_2)*4);//store count(c1)
  150. int *k2=(int*)malloc((c-c_2)*4);//store key
  151. __int64* v3=(__int64*)malloc((c-c_2)*8);

  152. memset(C2,0,(c-c_2)*4); //need?
  153. memset(v3,0,(c-c_2)*8);
  154. printf("申请后面内存%dms\n",clock()-t);
  155. t=clock();

  156. int y=0;
  157. for (int i=0;i<c_2;i++)
  158. {
  159. for(int j=0;j<15;j++)
  160. {
  161. int recn=key_recn2[(k[i]&mask[j])+null[j]]-c_2;
  162. k2[recn]=(k[i]&mask[j])+null[j];
  163. C2[recn]+=C[i];
  164. v3[recn]=v3[recn]+v2[i];

  165. y=recn;
  166. }
  167. }
  168. printf("汇总后面节点%dms,recn=%d,每毫秒读%d行,每毫秒写%d行\n",clock()-t,c,c_2/(clock()-t),(c-c_2)/(clock()-t));
  169. t=clock();
  170. /*
  171. printf("%fms,recn=%d,c1=%d,c2=%d,c3=%d,c4=%d,count=%d,sum=%I64d\n",(float)(clock()-t)/CLOCKS_PER_SEC ,c,
  172. (k2[y]>>24),((k2[y]>>16)&255),((k2[y]>>8)&255),(k2[y]&255),C2[y],v3[y]);
  173. */
  174. free(c1);
  175. free(c2);
  176. free(c3);
  177. free(c4);
  178. free(v1);
  179. free(v2);
  180. free(C);
  181. free(k);
  182. free(C2);
  183. free(k2);
  184. free(v3);
  185. printf("释放所有动态内存%dms\n",clock()-t);



  186. }
  187. return 0;
  188. }
  189. ~~~~~~~~~~~~~~~~~~~~~~~~~
  190. 4,5,67,114,152760
  191. 申请源表内存0ms
  192. 填充源表数据62ms,recn=0,每毫秒16129行
  193. 新建一层节点203ms,recn=152760,每毫秒读4926行,每毫秒写752节点
  194. 申请一层内存0ms
  195. 写入一层数据172ms,recn=152760,每毫秒读5813行,每毫秒写888行
  196. 新建后面节点250ms,recn=234600,每毫秒读611行key,每毫秒写327节点
  197. 申请后面内存0ms
  198. 汇总后面节点266ms,recn=234600,每毫秒读574行,每毫秒写307行
  199. 释放所有动态内存0ms
  200. 9,19,109,114,2124846
  201. 申请源表内存0ms
  202. 填充源表数据16ms,recn=0,每毫秒62500行
  203. 新建一层节点500ms,recn=941716,每毫秒读2000行,每毫秒写1883节点
  204. 申请一层内存0ms
  205. 写入一层数据296ms,recn=941716,每毫秒读3378行,每毫秒写3181行
  206. 新建后面节点2016ms,recn=1346870,每毫秒读467行key,每毫秒写200节点
  207. 申请后面内存0ms
  208. 汇总后面节点2344ms,recn=1346870,每毫秒读401行,每毫秒写172行
  209. 释放所有动态内存0ms
  210. 9,97,119,114,11843118
  211. 申请源表内存0ms
  212. 填充源表数据16ms,recn=0,每毫秒62500行
  213. 新建一层节点437ms,recn=1000000,每毫秒读2288行,每毫秒写2288节点
  214. 申请一层内存0ms
  215. 写入一层数据219ms,recn=1000000,每毫秒读4566行,每毫秒写4566行
  216. 新建后面节点3063ms,recn=2299600,每毫秒读326行key,每毫秒写424节点
  217. 申请后面内存0ms
  218. 汇总后面节点3406ms,recn=2299600,每毫秒读293行,每毫秒写381行
  219. 释放所有动态内存0ms
复制代码

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
40#
发表于 2010-2-27 13:08 | 只看该作者
原帖由 〇〇 于 2010-2-27 11:27 发表
每个分组取值增加,汇总行数增加,时间增加

/* compiled by cl of vc2003*/
#include
#include
#include
#include
#include
#define add_key {if((key_recn.find(key))== key_recn.end())key_recn[key]=c++;}
#define addkey {if((key_recn2.find(key))== key_recn2.end())key_recn2[key]=c++;}
#define __int64 long long
using namespace std;
struct ltstr
{
  bool operator()(const char* s1, const char* s2) const
  {
    return strcmp(s1, s2) < 0;
  }
};
struct ltint
{
  bool operator()(const int s1, const int s2) const
  {
    return (s1

还是弄成微秒算吧,用gettimeofday()函数,不知win上有没有。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表