公司刚接到一个电信行业的项目,要求是能够快速将从网络传过来的数据写入数据库(数万条/秒),同时还要进行查询、删除操作。现在通过OTL流的批量提交方式,可以实现对无索引表的近10万条记录/秒的插入操作,但查询操作显得太慢了。表里只有几十万条数据还好,但当表里有上千万条记录的时候,查询和删除操作要等十几分钟。
请问各位大侠:
1. 有没有实现能够快速插入,同时又高效查询、删除操作的建议?
2. 现在我通过三个线程分别处理插入、查询、删除操作,以下操作流程会不会引起问题?说明一下:因公司对代码有管控,上班的时候不能发贴,只能在家把大致流程写出来,各位多多原谅啊。CCritialSection cs;   //全局锁
otl_connect db; 
      
otl_connect::otl_initialize(1);  //指定多线程环境
db.rlogon(...);...
//插入操作线程...
cs.Lock();
otl_stream outStream(5000, "insert into test values(:f1<int>, :f2<char[20]>, ...", db);//构造数据并写缓冲区
while(...)
{
   outStream << x << "123";
}
cs.unlock();//查询操作线程...
cs.Lock();
otl_stream inStream(5000, "select * from test where ...", db);//解析数据
while(...)
{
   inStream >> i;
   inStream >> str;
   ....
}
cs.unlock();
//删除操作线程...
cs.Lock();otl_cursor::direct_exec(db, "delete from test where ...");cs.unlock();

解决方案 »

  1.   

    oracle下 select ,update 等操作时都会加锁,线程同时跑的话会不会有堵塞问题
      

  2.   

    要试试NOSQL内存数据库?感觉不错,速度快,后端再慢慢处理
      

  3.   

    高手赶紧给楼主解决一下问题,解决完后顺便帮我们讲讲Oracle调优培训课,有讲课费的哦,日薪800-1500元,Q我:QQ174629429,ciitc.com
      

  4.   

    NoSQL内存读取效率应该会高一些了。
      

  5.   


    不光需要插入,同时还有查询和删除操作呢,处理并发操作,用NoSQL速度会可以吗?
      

  6.   

    1.流程上:我觉得倒不会有太大问题,因为你每次操作都是先LOCK,再UNLOCK的,只是如果发生插入线程和删除线程同时对某张表进行操作时,可能会因为抢占锁浪费些时间。
    2.查询速度问题:
    (1)因为表里数据量很大的时候,即使不通过程序,本身去数据库里直接执行SELECT语句就是很慢的,所以如果每次查询都访问数据库查,一定也是很慢的,这个好象不太好解决。除非使用内存数据库,就是TimesTen数据库,它会把大量的数据存到内存里,这样存取很快。但是你们已经定了使用Oracle数据库,也不能改了。
    (2)如果说把INSERT或者UPDATE的数据先临时写到内存里,然后隔断时间再去真正操作数据库,写数据库的表,这样倒是可以,就类似于Oracle本身的写数据Buffer的机制。但是可能不太好实现。
    (3)如果上述两种方法,都不行,那只能给表建索引,或者分区,在SELECT语句中,走索引,走分区。这样可能比较简单,效率可以提高一些,但是效果不是很明显。
      

  7.   

    楼上说的甚是,这样搞多线程我感觉速度也明显慢了。如果为每个线程分配一个connect对象,线程间不用去抢占connect对象资源应该会好些,只是不知道多线程同时提交同一个表的操作命令时,oracle是否也会多线程处理?数据过来后要马上入库(超过1秒种可能就会造成数据丢失),因为有其它的程序不停地去数据库中查询相应的数据,所以不能直接放在内存里。看来只能尝试第三种方法了。大家还有什么建议没有,特别是oracle对多线程处理的问题,小弟再次谢过!
      

  8.   

    ORACLE对于多个CONNECT,会同时处理,但是关键的是,多个CONNECT想要操作的还是同一张表。。
    还是不能解决根本的锁的问题。
      

  9.   

    谢谢大家的回复!关于更多oracle多线程处理问题,请进:
    http://topic.csdn.net/u/20110831/00/e041462f-411d-490c-97d0-b91921a39963.html