周末研究数据库难题
1 我当前大java工程是linux +mysql +java+tomcat
有一个缓冲cache db , 之后是在线db
缓冲cache db里面的是 java 批量更新技术(addbatch() update())
来实现数据的增加 删除 修改。
完全在web程序里用java +sql 实现。 (这个缓冲的时间很长,至少20分)
我看了日志记载的启动所有sql
很多的更新都是
insert value(a,bc), (a,bc), (a,bc), (a,bc),(a,bc),(a,bc),(a,bc),(a,bc),(a,bc),
update set where id =(1,2,3,3,44,,5,55,,5,5,5,,5,5,55,,5,5,5,5,)
delete where id =(1,2,3,3,44,,5,55,,5,5,5,,5,5,55,,5,5,5,5,)我已经在java实现了批量埂新。
这里有疑问, 如果我用存储过程实现批量更新,该如何作
(是否能够比java+sql 速度要快? 首先探讨他的必要性)另外一直疑惑select 用存储似乎是没有必要的?? (在高访问量的网站里
究竟如何选择存储过程? 是selec用 还是 批量埂新使用
)
2 在导入一个表的时候同时修改表导致数据库死锁,最后在linux 用mysqld restart发现不能启动数据库
最后重启linux系统解决这个问题。
为什么linux 用mysqld restart发现不能启动数据库?
为什么重启linux系统解决这个问题?
1 我当前大java工程是linux +mysql +java+tomcat
有一个缓冲cache db , 之后是在线db
缓冲cache db里面的是 java 批量更新技术(addbatch() update())
来实现数据的增加 删除 修改。
完全在web程序里用java +sql 实现。 (这个缓冲的时间很长,至少20分)
我看了日志记载的启动所有sql
很多的更新都是
insert value(a,bc), (a,bc), (a,bc), (a,bc),(a,bc),(a,bc),(a,bc),(a,bc),(a,bc),
update set where id =(1,2,3,3,44,,5,55,,5,5,5,,5,5,55,,5,5,5,5,)
delete where id =(1,2,3,3,44,,5,55,,5,5,5,,5,5,55,,5,5,5,5,)我已经在java实现了批量埂新。
这里有疑问, 如果我用存储过程实现批量更新,该如何作
(是否能够比java+sql 速度要快? 首先探讨他的必要性)另外一直疑惑select 用存储似乎是没有必要的?? (在高访问量的网站里
究竟如何选择存储过程? 是selec用 还是 批量埂新使用
)
2 在导入一个表的时候同时修改表导致数据库死锁,最后在linux 用mysqld restart发现不能启动数据库
最后重启linux系统解决这个问题。
为什么linux 用mysqld restart发现不能启动数据库?
为什么重启linux系统解决这个问题?
insert value(a,bc), (a,bc), (a,bc), (a,bc),(a,bc),(a,bc),(a,bc),(a,bc),(a,bc),
这样批量提交,效果会比你
insert value(a,bc), (a,bc);
insert value(a,bc), (a,bc);
...
这样要好
------------------
用存储过程是否好?
这里就要看你的SQL语句长短了,毕竟涉及到传输的数据包的大小
还有就是你的程序数据连接是否长连接?
是否能起到SQL共享?
--------------------
2 在导入一个表的时候同时修改表导致数据库死锁,最后在linux 用mysqld restart发现不能启动数据库
最后重启linux系统解决这个问题。
为什么linux 用mysqld restart发现不能启动数据库?
为什么重启linux系统解决这个问题? 死锁?死锁的会自动终止某一处理连接的
估计你的某个处理还在一直处理中
可以看看show processlist跟踪
正常连接,数据库本身起到保护作用,其要等待所有线程都要释放掉的,所以,说明还有东西没处理完
重启当然可以拉,等于你关掉电脑电源一样了
insert value(a,bc), (a,bc), (a,bc), (a,bc),(a,bc),(a,bc),(a,bc),(a,bc),(a,bc),.。。
是非常长的, 有时候翻页高达几十页。 一直疑惑select 用存储似乎是没有必要的,还有就是你的程序数据连接是否长连接?
是否能起到SQL共享---------不需要sql共享 仅仅插入或删除 修改一次按照楼上意思,如若SQL共享,那就仅仅select才能用存储过程。数据连接是否长连接?可以举例子说明吗? 不是很清晰你的意思
请问是否还需要用存储过程么没有??
特别是java之类的编程工具,已经有很丰富和强大的函数处理数据更新和批量更新。
如果是java 或者 c#这样客户端还参与了计算这样,这样减小了数据库服务器端的压力。(不知道像搞访问量的网站如ebay等他们使用到了存储过程没有?)
但是大型高访问量的网站 ,数据库集群+
n台web服务器的架构, 直觉还是不用存储过程为好
(现在存储过程究竟还有什么用???)