周末研究数据库难题
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.   

    不是很懂你的需求,但有几点可以提一下的:
    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跟踪
    正常连接,数据库本身起到保护作用,其要等待所有线程都要释放掉的,所以,说明还有东西没处理完
    重启当然可以拉,等于你关掉电脑电源一样了
      

  2.   

    感谢楼上 第2个问题解决第1个问题很困惑
    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才能用存储过程。数据连接是否长连接?可以举例子说明吗? 不是很清晰你的意思
      

  3.   

    删除或者修改的时候 后面有where语句
    请问是否还需要用存储过程么没有?? 
      

  4.   

    同意楼上。
    特别是java之类的编程工具,已经有很丰富和强大的函数处理数据更新和批量更新。
    如果是java 或者 c#这样客户端还参与了计算这样,这样减小了数据库服务器端的压力。(不知道像搞访问量的网站如ebay等他们使用到了存储过程没有?)
      

  5.   

    小型系统存储过程可用。
    但是大型高访问量的网站 ,数据库集群+
    n台web服务器的架构, 直觉还是不用存储过程为好 
    (现在存储过程究竟还有什么用???)