楼主: itsyh

[求助]如何以最快的速度插入数据?

[复制链接]
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
31#
 楼主| 发表于 2003-7-10 21:40 | 只看该作者
最初由 xmmhacker 发布
[B]有没有注意到插入日志的时间,如果使用bcp的话可以避免插入不需要的日志.要知道如果真的在业务系统上实时的倒数据库的,日志文件也是必须考虑的因素. [/B]

哦,能告诉我怎么弄么?告诉我书名也行啊,我去找:)
对ms sql知道的实在有限,抱歉。

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
32#
发表于 2003-7-10 22:51 | 只看该作者
itsyh,看来我的IO方面知识不够。今后还要向你多学习,我就是你的弟子了。:)
对了,我目前用的也是Java和JB,今后还可多交流。

一般的DML语句都是要写日志的,而bcp只是一个命令程序,因此它是不会写日志的。

实时系统的数据处理问题何不用MSSQL中的订阅和发布来做?

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
33#
 楼主| 发表于 2003-7-10 23:01 | 只看该作者
最初由 zhuzhichao 发布
[B]itsyh,对了,我目前用的也是Java和JB,今后还可多交流。

一般的DML语句都是要写日志的,而bcp只是一个命令程序,因此它是不会写日志的。[/B]

zhuzhichao 老大啊,不知道在java中怎么调用“BCP”啊?我真的找不到资料啊,5555555

给我弄一个java程序我学学,嘻嘻,多谢!!

java我是初学者,不太懂的说,以后多多指教:)


[B]实时系统的数据处理问题何不用MSSQL中的订阅和发布来做? [/B]

这个冬冬又是怎么弄呢?能说说么?多谢!

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
34#
发表于 2003-7-10 23:29 | 只看该作者
你先做一个将表中数据写成.txt文件的例子就明白了:
新做一个.bat文件叫sysobjects.bat,里面写入如下的代码:
bcp master.dbo.sysobjects out d:\sysobjects.txt -S此处填DB服务器的ip -Usa -P此处填sa用户的密码 -c

然后在你的Java程序中写下这样的代码,运行后就可在d驱上生成sysobjects.txt文件了:
java.lang.Runtime.getRuntime().exec("d://sysobjects.bat";


这么晚了还不睡?
我要先休息了,订阅发布的事明天再说吧。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
35#
 楼主| 发表于 2003-7-11 09:07 | 只看该作者
最初由 zhuzhichao 发布
[B]你先做一个将表中数据写成.txt文件的例子就明白了:
新做一个.bat文件叫sysobjects.bat,里面写入如下的代码:
bcp master.dbo.sysobjects out d:\sysobjects.txt -S此处填DB服务器的ip -Usa -P此处填sa用户的密码 -c

然后在你的Java程序中写下这样的代码,运行后就可在d驱上生成sysobjects.txt文件了:
java.lang.Runtime.getRuntime().exec("d://sysobjects.bat";


这么晚了还不睡?
我要先休息了,订阅发布的事明天再说吧。 [/B]

多谢!这都行,不错!!我试试:)3Q!!

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
36#
 楼主| 发表于 2003-7-11 09:29 | 只看该作者
试验完毕,嘿嘿,这个方法简直是没法说,速度太快了,嘿嘿~~~~
241ms就轻松导入1万条数据,太感谢上面各位帮助我的朋友了!

C:\>bcp qw.dbo.test in c:\1.txt -S qw -U sa -P sa -c

开始复制...
1000 列送到 SQL Server。合计送出: 1000
1000 列送到 SQL Server。合计送出: 2000
1000 列送到 SQL Server。合计送出: 3000
1000 列送到 SQL Server。合计送出: 4000
1000 列送到 SQL Server。合计送出: 5000
1000 列送到 SQL Server。合计送出: 6000
1000 列送到 SQL Server。合计送出: 7000
1000 列送到 SQL Server。合计送出: 8000
1000 列送到 SQL Server。合计送出: 9000
1000 列送到 SQL Server。合计送出: 10000

已复制了 10000 行。
数据包的大小(字节): 4096
时钟时间(毫秒): 共    241

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
37#
 楼主| 发表于 2003-7-11 09:45 | 只看该作者
不知道各位还有没有兴趣继续讨论啊?呵呵,很好玩哦!

1、如何控制导入的完整性?比如,数据TXT包含有不符合规格的数据,导入出错了,该怎么办?这个冬冬能加上事务处理么?也就是说出错的话,能回滚回导入之前的状态么?

我的目前想到的方法是判断其输出结果来一行行的判断,还有没有更好的方法?
开始复制...
SQLState = 22008, NativeError = 0
Error = [Microsoft][ODBC SQL Server Driver]无效的数据格式
1000 列送到 SQL Server。合计送出: 1000
1000 列送到 SQL Server。合计送出: 2000
1000 列送到 SQL Server。合计送出: 3000
1000 列送到 SQL Server。合计送出: 4000
1000 列送到 SQL Server。合计送出: 5000
1000 列送到 SQL Server。合计送出: 6000
1000 列送到 SQL Server。合计送出: 7000
1000 列送到 SQL Server。合计送出: 8000
1000 列送到 SQL Server。合计送出: 9000

已复制了 9999 行。
数据包的大小(字节): 4096
时钟时间(毫秒): 共    260

使用道具 举报

回复
论坛徽章:
4
ITPUB元老
日期:2007-07-12 21:18:51授权会员
日期:2007-07-12 21:19:26ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512012新春纪念徽章
日期:2012-01-04 11:49:54
38#
发表于 2003-7-11 09:49 | 只看该作者
呵呵 既然 BCP 能够满足速度要求,那就先用哦
至于 transaction ,BCP  本声不记日志 怎么能够保证数据完整性呢,这方面的要求,就要靠你写一个加载日志来处理哦

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
39#
 楼主| 发表于 2003-7-11 09:59 | 只看该作者
2、to xuanxuan:不知道你对实时数据库熟悉么?有没有什么物廉价美的产品推荐给我几个?
3、to xuanxuan:
向数据库直接提交数据,整体速度肯定比分步提交快。也不一定要 bcp
我开始只是说如果使用bcp单位时间的数据加载速度可能是最快的

——好啊,只是不知道如何通过程序来控制啊?能给我个Demo学学么?3Q!!
4、to xuanxuan:
所以 建议你直接使用mssql插数据,如果出现问题,再改进程序 或方法也可以。只要业务逻辑
没有变化,应该改动不大

——不知道这个是如何理解?不太懂,如何才能直接使用mssql插数据?
5、如何控制日志文件的记录操作?也就是如何去掉那些不必要的日志记录操作?以加快操作速度?
6、“实时系统的数据处理问题何不用MSSQL中的订阅和发布来做?”
——这个冬冬又是怎么弄呢?能说说么?多谢!
7、
至于 transaction ,BCP 本声不记日志 怎么能够保证数据完整性呢,这方面的要求,就要靠你写一个加载日志来处理哦

——这个加载日志是否就是我自己写程序来处理其输出结果?或者是其他?

使用道具 举报

回复
论坛徽章:
4
ITPUB元老
日期:2007-07-12 21:18:51授权会员
日期:2007-07-12 21:19:26ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512012新春纪念徽章
日期:2012-01-04 11:49:54
40#
发表于 2003-7-11 10:47 | 只看该作者
呵呵 我不熟悉 REAL-TIMEdatabase    据说这些数据库主要用于
工业现场数据采集系统中,比如化工、自动化设备监控等
你自己 google 看看

我想问一下,你对于数据插入的速度到底有什么要求,按照你的说法 这些数据不可能是人工输入的,否则不管人输入多快 计算机都能处理,如果是其他系统的数据导入,速度这么重要吗?

我意思是你直接 在程序中 insert 应该没什么太大的问题

去掉记录日志的步骤,只有 BCP 以及 select into  可以,不过后者可能不合适

订阅与发布是保证多个数据库中数据同步复制的,跟 RTB 好象没什么直接关系

加载数据日志,就是记录一下每次加载数据的开始数据、、截止数据、成功与失败情况  至于怎么保证完整 ,实在要求的话
还是只能够用 MSSQL 本身的功能,自己写肯定不好


——这个加载日志是否就是我自己写程序来处理其输出结果?或者是其他?

使用道具 举报

回复

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

本版积分规则 发表回复

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