y*w
2 楼
从jdbc的result set往表中插入记录,假设类型等meta data完全匹配,怎么效率最高?
1. 循环里挨条差。小应用无所谓,数据量大了就傻眼。
2. 构造insert语句同时插入多条记录,比如100条,这个100可以参数化,可以自动评
估,注意避免sql语句的长度limit。
3. 生成临时(内存)文件,然后批处理load/bcp等。
大家有啥想法?
1. 循环里挨条差。小应用无所谓,数据量大了就傻眼。
2. 构造insert语句同时插入多条记录,比如100条,这个100可以参数化,可以自动评
估,注意避免sql语句的长度limit。
3. 生成临时(内存)文件,然后批处理load/bcp等。
大家有啥想法?
m*o
3 楼
Consider the following C++ program declarations for a linked-list class:
class Node {
friend class LinkedList;
int value;
Node* next;
Node() {next = 0;}
}
class LinkedList {
Node* head;
Public:
LinkedList() { head = 0; }
bool addElement(Node * newElement);
...
}
An instance of class LinkedList is to be used to maintain a sorted list.
Write function LinkedList::addElement(Node * newElement) which inserts
newElement into the linked list at the appropriate location and returns
false
class Node {
friend class LinkedList;
int value;
Node* next;
Node() {next = 0;}
}
class LinkedList {
Node* head;
Public:
LinkedList() { head = 0; }
bool addElement(Node * newElement);
...
}
An instance of class LinkedList is to be used to maintain a sorted list.
Write function LinkedList::addElement(Node * newElement) which inserts
newElement into the linked list at the appropriate location and returns
false
s*w
4 楼
超爱这首歌啊!
t*m
10 楼
我也很喜欢这首歌。
1996年前的Celine Deion真好听。
1996年前的Celine Deion真好听。
s*e
12 楼
这些都是Knight Capital Group的Electronic Trading Group
的Developer candidate screening questions吧。
人家都说了要你自己做了。Please keep them PRIVATE。
Consider the following C++ program declarations for a linked-list class:
class Node {
friend class LinkedList;
int value;
Node* next;
Node() {next = 0;}
}
class LinkedList {
Node* head;
Public:
LinkedList() { head = 0; }
bool addElement(Node * newElement);
...
}
An instance of class LinkedList is to be used to maintain a sorted list.
Write function Li
【在 m*******o 的大作中提到】
: Consider the following C++ program declarations for a linked-list class:
: class Node {
: friend class LinkedList;
: int value;
: Node* next;
: Node() {next = 0;}
: }
: class LinkedList {
: Node* head;
: Public:
的Developer candidate screening questions吧。
人家都说了要你自己做了。Please keep them PRIVATE。
Consider the following C++ program declarations for a linked-list class:
class Node {
friend class LinkedList;
int value;
Node* next;
Node() {next = 0;}
}
class LinkedList {
Node* head;
Public:
LinkedList() { head = 0; }
bool addElement(Node * newElement);
...
}
An instance of class LinkedList is to be used to maintain a sorted list.
Write function Li
【在 m*******o 的大作中提到】
: Consider the following C++ program declarations for a linked-list class:
: class Node {
: friend class LinkedList;
: int value;
: Node* next;
: Node() {next = 0;}
: }
: class LinkedList {
: Node* head;
: Public:
w*r
14 楼
800M, yo bet you need to use loader tool
parallel insert may get the record in, but later table maintenance is issue:
i.e. how record scattered to different disk blocks, data block splitting ,
indexing data file fragment, reorg table etcetc.
【在 y****w 的大作中提到】
: 不一定jdbc,用c api也可以。
: 数据不分先后。多线程没问题,如果做通用方案就有个锁的问题; 套个provider/
: consumer的pattern实现方面还好.
: 数据量,假设我有800M records吧。
parallel insert may get the record in, but later table maintenance is issue:
i.e. how record scattered to different disk blocks, data block splitting ,
indexing data file fragment, reorg table etcetc.
【在 y****w 的大作中提到】
: 不一定jdbc,用c api也可以。
: 数据不分先后。多线程没问题,如果做通用方案就有个锁的问题; 套个provider/
: consumer的pattern实现方面还好.
: 数据量,假设我有800M records吧。
t*t
15 楼
倒也不一定是那里的题, 类似的题在网上很久了.
【在 s******e 的大作中提到】
: 这些都是Knight Capital Group的Electronic Trading Group
: 的Developer candidate screening questions吧。
: 人家都说了要你自己做了。Please keep them PRIVATE。
:
: Consider the following C++ program declarations for a linked-list class:
: class Node {
: friend class LinkedList;
: int value;
: Node* next;
: Node() {next = 0;}
【在 s******e 的大作中提到】
: 这些都是Knight Capital Group的Electronic Trading Group
: 的Developer candidate screening questions吧。
: 人家都说了要你自己做了。Please keep them PRIVATE。
:
: Consider the following C++ program declarations for a linked-list class:
: class Node {
: friend class LinkedList;
: int value;
: Node* next;
: Node() {next = 0;}
y*w
16 楼
loader工具对insert的优势也不在fragment这方面。这里处理大数据就suppose没那么其他东西来捣乱,乱是乱不了的,就是乱了也不怕,这很容易控制和纠正,
loader的问题是怎么和内存(cursor)挂接起来,没有方便的api。似乎只能通过文件(哪怕是内存文件)中转下。
800M是一个极端,就是讲效率必须被重视。
btw, staging表暂时禁用log也是有价值的。
issue:
,
【在 w*r 的大作中提到】
: 800M, yo bet you need to use loader tool
: parallel insert may get the record in, but later table maintenance is issue:
: i.e. how record scattered to different disk blocks, data block splitting ,
: indexing data file fragment, reorg table etcetc.
loader的问题是怎么和内存(cursor)挂接起来,没有方便的api。似乎只能通过文件(哪怕是内存文件)中转下。
800M是一个极端,就是讲效率必须被重视。
btw, staging表暂时禁用log也是有价值的。
issue:
,
【在 w*r 的大作中提到】
: 800M, yo bet you need to use loader tool
: parallel insert may get the record in, but later table maintenance is issue:
: i.e. how record scattered to different disk blocks, data block splitting ,
: indexing data file fragment, reorg table etcetc.
w*r
18 楼
其他的我不知道,TD上面就有这个问题,你做很多 parallel insert, 如果target
table data block 64K, 很容易出现很多small data block, fragment. 做完了,我
还得在做一个insert/select..
如果loader, 一定木的这个问题
redo/undo log在loader里面直接disable,如果SQL, 每个trsanction 都在生成redo/
undo log (journal in teradata).
内存挂钩有很多tool , 直接用informatica 处理,nongstaged loader (named pipe
under unix)不就是你说的挂钩了?
么其他东西来捣乱,乱是乱不了的,就是乱了也不怕,这很容易控制和纠正,
(哪怕是内存文件)中转下。
【在 y****w 的大作中提到】
: loader工具对insert的优势也不在fragment这方面。这里处理大数据就suppose没那么其他东西来捣乱,乱是乱不了的,就是乱了也不怕,这很容易控制和纠正,
: loader的问题是怎么和内存(cursor)挂接起来,没有方便的api。似乎只能通过文件(哪怕是内存文件)中转下。
: 800M是一个极端,就是讲效率必须被重视。
: btw, staging表暂时禁用log也是有价值的。
:
: issue:
: ,
table data block 64K, 很容易出现很多small data block, fragment. 做完了,我
还得在做一个insert/select..
如果loader, 一定木的这个问题
redo/undo log在loader里面直接disable,如果SQL, 每个trsanction 都在生成redo/
undo log (journal in teradata).
内存挂钩有很多tool , 直接用informatica 处理,nongstaged loader (named pipe
under unix)不就是你说的挂钩了?
么其他东西来捣乱,乱是乱不了的,就是乱了也不怕,这很容易控制和纠正,
(哪怕是内存文件)中转下。
【在 y****w 的大作中提到】
: loader工具对insert的优势也不在fragment这方面。这里处理大数据就suppose没那么其他东西来捣乱,乱是乱不了的,就是乱了也不怕,这很容易控制和纠正,
: loader的问题是怎么和内存(cursor)挂接起来,没有方便的api。似乎只能通过文件(哪怕是内存文件)中转下。
: 800M是一个极端,就是讲效率必须被重视。
: btw, staging表暂时禁用log也是有价值的。
:
: issue:
: ,
y*w
20 楼
不太懂TD. loader这方面一定好,毫无疑问。
我现在倾向于还是写文件出来了再调用load api了。也许可以做成几种可选的模式,只在超大表上这么搞。 不是太夸张的碎片大多数还是可以忍受的。
不能直接用load api的原因主要是source和target不同构。
【在 w*r 的大作中提到】
: 其他的我不知道,TD上面就有这个问题,你做很多 parallel insert, 如果target
: table data block 64K, 很容易出现很多small data block, fragment. 做完了,我
: 还得在做一个insert/select..
: 如果loader, 一定木的这个问题
: redo/undo log在loader里面直接disable,如果SQL, 每个trsanction 都在生成redo/
: undo log (journal in teradata).
: 内存挂钩有很多tool , 直接用informatica 处理,nongstaged loader (named pipe
: under unix)不就是你说的挂钩了?
:
: 么其他东西来捣乱,乱是乱不了的,就是乱了也不怕,这很容易控制和纠正,
我现在倾向于还是写文件出来了再调用load api了。也许可以做成几种可选的模式,只在超大表上这么搞。 不是太夸张的碎片大多数还是可以忍受的。
不能直接用load api的原因主要是source和target不同构。
【在 w*r 的大作中提到】
: 其他的我不知道,TD上面就有这个问题,你做很多 parallel insert, 如果target
: table data block 64K, 很容易出现很多small data block, fragment. 做完了,我
: 还得在做一个insert/select..
: 如果loader, 一定木的这个问题
: redo/undo log在loader里面直接disable,如果SQL, 每个trsanction 都在生成redo/
: undo log (journal in teradata).
: 内存挂钩有很多tool , 直接用informatica 处理,nongstaged loader (named pipe
: under unix)不就是你说的挂钩了?
:
: 么其他东西来捣乱,乱是乱不了的,就是乱了也不怕,这很容易控制和纠正,
m*o
21 楼
没想到大家都准备得那么充分啊
g*l
24 楼
巨量插入删除还是要ETL的软件,或者BCP,否则光LOG也把数据库搞死了。我觉得自己编
的BATCH软件就是垃圾,就应该全部LOAD进STAGING TABLE,然后用SP去VALIDATE,全通
过的用FAST TABLE LOAD LOAD进去,一边LOAD一边VALIDATE,要猴年马月才能LOAD完啊
。
的BATCH软件就是垃圾,就应该全部LOAD进STAGING TABLE,然后用SP去VALIDATE,全通
过的用FAST TABLE LOAD LOAD进去,一边LOAD一边VALIDATE,要猴年马月才能LOAD完啊
。
m*y
31 楼
可以试试把所有要insert/update的record做成xml file, 然后写个stored proc, 用sp
_xml_preparedocument and OPENXML把所有records弄到temp table/table variable去
, 然后做batch update/insert. 当然可以省中间一部,但是records太多可能会引起
blocking.
_xml_preparedocument and OPENXML把所有records弄到temp table/table variable去
, 然后做batch update/insert. 当然可以省中间一部,但是records太多可能会引起
blocking.
g*l
32 楼
XML,慢死人的,千万别用XML,FILE直接DTS进TABLE,TABLE之间DTS快的多,DB
PROGRAMMER抢了VB PROGRAMMER的饭碗,VB PROGRAMMER现在基本没饭吃了。
sp
【在 m******y 的大作中提到】
: 可以试试把所有要insert/update的record做成xml file, 然后写个stored proc, 用sp
: _xml_preparedocument and OPENXML把所有records弄到temp table/table variable去
: , 然后做batch update/insert. 当然可以省中间一部,但是records太多可能会引起
: blocking.
PROGRAMMER抢了VB PROGRAMMER的饭碗,VB PROGRAMMER现在基本没饭吃了。
sp
【在 m******y 的大作中提到】
: 可以试试把所有要insert/update的record做成xml file, 然后写个stored proc, 用sp
: _xml_preparedocument and OPENXML把所有records弄到temp table/table variable去
: , 然后做batch update/insert. 当然可以省中间一部,但是records太多可能会引起
: blocking.
v*r
36 楼
假如后台是 Oracle, client 用 jdbc load data 的话,效率最高的应该是用 jdbc 的
batch operation + bind variable, 基本上能达到 pl/sql 的bulk insert 的
performance。
你说的2 好像是这个意思,但没提到 bind variable,你可以 不用 bind variable 来
batch 100 条 record inserts, the only thing you save comparing with "no
batch" is a little bit less network traffic for sending requests, 不会有什么
performance 提高,只有同时用 bind variable, oracle 才能 bind all 100 input
values,then execute them as one run inside sql engine,. Bulk size 100 有点
低,我一般 500 起。做benchmark 的时候,你应该很容易找到一个最适合你 server
的 bulk size.
对SQLServer 不甚了解,但tsql 的 bulk insert syntax 好像是从file 里load data,
不知道 jdbc for sqlserver 能否 interact with sql engine directly in
sqlserver (like the case of oracle). 如果非要用 data file 的活,oracle 有更
快更方便的方法来 load, jdbc 就没必要了。
高?
【在 y****w 的大作中提到】
: 从jdbc的result set往表中插入记录,假设类型等meta data完全匹配,怎么效率最高?
: 1. 循环里挨条差。小应用无所谓,数据量大了就傻眼。
: 2. 构造insert语句同时插入多条记录,比如100条,这个100可以参数化,可以自动评
: 估,注意避免sql语句的长度limit。
: 3. 生成临时(内存)文件,然后批处理load/bcp等。
: 大家有啥想法?
batch operation + bind variable, 基本上能达到 pl/sql 的bulk insert 的
performance。
你说的2 好像是这个意思,但没提到 bind variable,你可以 不用 bind variable 来
batch 100 条 record inserts, the only thing you save comparing with "no
batch" is a little bit less network traffic for sending requests, 不会有什么
performance 提高,只有同时用 bind variable, oracle 才能 bind all 100 input
values,then execute them as one run inside sql engine,. Bulk size 100 有点
低,我一般 500 起。做benchmark 的时候,你应该很容易找到一个最适合你 server
的 bulk size.
对SQLServer 不甚了解,但tsql 的 bulk insert syntax 好像是从file 里load data,
不知道 jdbc for sqlserver 能否 interact with sql engine directly in
sqlserver (like the case of oracle). 如果非要用 data file 的活,oracle 有更
快更方便的方法来 load, jdbc 就没必要了。
高?
【在 y****w 的大作中提到】
: 从jdbc的result set往表中插入记录,假设类型等meta data完全匹配,怎么效率最高?
: 1. 循环里挨条差。小应用无所谓,数据量大了就傻眼。
: 2. 构造insert语句同时插入多条记录,比如100条,这个100可以参数化,可以自动评
: 估,注意避免sql语句的长度limit。
: 3. 生成临时(内存)文件,然后批处理load/bcp等。
: 大家有啥想法?
y*w
39 楼
good point. 这个我这几天也在考虑,不过没有做实验验证过。毕竟我不是programmer
,这些也就是,思考思考。
argument:
1. executeBatch是成批将sql语句送到dbms执行,节省反复传送大批sql语句的时间,
是否本地执行就可能有比较大区别。
2. dbms这边这些insert还是单行插入的。数据库寻找slot,插入,logging等cost跑不
了,也很零碎。这是自己组装大型sql语句的考虑。与1相比,假如batch size相同,性
能应该更有优势。
3. 将executeBatch与组装大型sql语句结合。这是我目前最倾向的方案,对于中等规模
的数据。应该能够有不错的性能,关键是够简洁,也可配置。
其他可以加进来的是a) 流水。引进一个provider/consumer模式并不难。 b) 很容易扩
展a支持并发。
对大型数据,还是包装loader合适。
btw,我只是想讨论下这块的实现技术。即便说ssis之类,这些工具把数据倒到内村里也要考虑怎么做,所以就假设你自己在实现一个c或者java版本的ssis好了。
input
【在 v*****r 的大作中提到】
: 假如后台是 Oracle, client 用 jdbc load data 的话,效率最高的应该是用 jdbc 的
: batch operation + bind variable, 基本上能达到 pl/sql 的bulk insert 的
: performance。
: 你说的2 好像是这个意思,但没提到 bind variable,你可以 不用 bind variable 来
: batch 100 条 record inserts, the only thing you save comparing with "no
: batch" is a little bit less network traffic for sending requests, 不会有什么
: performance 提高,只有同时用 bind variable, oracle 才能 bind all 100 input
: values,then execute them as one run inside sql engine,. Bulk size 100 有点
: 低,我一般 500 起。做benchmark 的时候,你应该很容易找到一个最适合你 server
: 的 bulk size.
,这些也就是,思考思考。
argument:
1. executeBatch是成批将sql语句送到dbms执行,节省反复传送大批sql语句的时间,
是否本地执行就可能有比较大区别。
2. dbms这边这些insert还是单行插入的。数据库寻找slot,插入,logging等cost跑不
了,也很零碎。这是自己组装大型sql语句的考虑。与1相比,假如batch size相同,性
能应该更有优势。
3. 将executeBatch与组装大型sql语句结合。这是我目前最倾向的方案,对于中等规模
的数据。应该能够有不错的性能,关键是够简洁,也可配置。
其他可以加进来的是a) 流水。引进一个provider/consumer模式并不难。 b) 很容易扩
展a支持并发。
对大型数据,还是包装loader合适。
btw,我只是想讨论下这块的实现技术。即便说ssis之类,这些工具把数据倒到内村里也要考虑怎么做,所以就假设你自己在实现一个c或者java版本的ssis好了。
input
【在 v*****r 的大作中提到】
: 假如后台是 Oracle, client 用 jdbc load data 的话,效率最高的应该是用 jdbc 的
: batch operation + bind variable, 基本上能达到 pl/sql 的bulk insert 的
: performance。
: 你说的2 好像是这个意思,但没提到 bind variable,你可以 不用 bind variable 来
: batch 100 条 record inserts, the only thing you save comparing with "no
: batch" is a little bit less network traffic for sending requests, 不会有什么
: performance 提高,只有同时用 bind variable, oracle 才能 bind all 100 input
: values,then execute them as one run inside sql engine,. Bulk size 100 有点
: 低,我一般 500 起。做benchmark 的时候,你应该很容易找到一个最适合你 server
: 的 bulk size.
y*w
46 楼
是我开始没说清楚,我那两个帖子其实到底真正想搞清楚的是一回事儿,即在公开的编
程接口上,我们能怎样接近厂商的工具,或者厂商给我们提供的接口能提供多高的性能
。
程接口上,我们能怎样接近厂商的工具,或者厂商给我们提供的接口能提供多高的性能
。
相关阅读
关于正交向量(orthogonal vectors)的算法windows下怎么用gsl? (转载)inline functions in C++Is it safe?delete this problem随机数发生器问题请教置顶的那个面试必读究竟什么内容delete一问还是问一下过来人把,关于xmliterator and [], which is faster? 几道 google interview 的题目请教一个c问题 (转载)which is the best MySQL book ?请问 a+ = 2 与 a= a+2的区别VC里面window和class是什么关系?大家在linux下面用什么C++的IDE呢?请教一个gcc include path 的问题问一个奇怪的tomcat+svg问题 (转载)a simple question for C++ classQuestions about MAKEFILE