`
tou3921
  • 浏览: 68618 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率

阅读更多
向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率。
每次insert时还要select下,现在数据库里的数据已有几十万条,这样批量插入的时候效率就会很低,不得不这么做,谁有好的方法。
想过把关键内容取来放在map或者list里,然后每次从集合里判断,可这样内存就吃不消了。
...........
分享到:
评论
23 楼 jiming 2008-09-10  
wolfbrood 写道


方法1:就是先把数据插入一个临时表,然后通过sql找出临时表里面哪些数据在正式表里面没有,然后把这些数据插入正式表。至于怎么找没有重复的数据那就是你的事,数据库存储过程可以完成,也可以写程序一条一条的读出。
这个方法避免了每次插入都要查找一次,但不一样的数据就要插入两次。至于效率问题你可以自己慢慢调优。



这个方法应该是最好的之一
22 楼 抛出异常的爱 2008-09-10  
tou3921 写道
向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率。
每次insert时还要select下,现在数据库里的数据已有几十万条,这样批量插入的时候效率就会很低,不得不这么做,谁有好的方法。
想过把关键内容取来放在map或者list里,然后每次从集合里判断,可这样内存就吃不消了。
...........

插入一个临时表.....
之后用一个job
当有重复不动
无重复,插入并删除


这个东西很好写,比java用网络来端口通信快多了.
我以前也写过
21 楼 RyanPoy 2008-09-10  
可以利用BerkeleyDB,他是一个map,以key-value值存放在文件里面。能够很快的查询。
20 楼 shengdong 2008-09-10  
这个问题我也遇到了 目前我就是采用 先插后改的方法 我想目前几W的数据还是能够负载的吧
而且这个表也只有3、4列关联数据 我用PGSQL
19 楼 jacky_926 2008-09-10  
前段时间我们的一个项目,经常需要一次导入10-50w的数据,我们的解决办法是:
1.对数据建立唯一索引
2.将数据转换为csv/text文件格式
3.通过java 调用sqlloader直接导入

性能基本上能满足我们的要求,该解决方法缺点:
1.需要在应用服务器端安装ORACLE CLIENT
18 楼 xfxlf 2008-09-10  
说了太多废话

1.先select,再insert,消耗多少时间?
2.先insert,判断异常,消耗多少时间?

如果重复的键上有索引,开销多少时间?

之所以重复,就是说明这些字段上需要有唯一性,已经是业务含义的主键了,建立索引是理所应当的。

没数据,莫空谈

最好先在表中插入100万条记录,写个程序,测试下。半天就肯定搞定了

17 楼 snsnx 2008-09-10  
MeteorX 写道
Oracle自带的 merge into 语句,不知道是否符合楼主的要求。

merge into肯定不行,比如注册用户时,岂不是要update掉之前的用户?
16 楼 pcwang 2008-09-09  
根据你insert的频率和一次性insert的数据量来判断:如果频率不快(比如一天一次),可以采取先select再insert,如果数据量大的话,可以select的时候拼in来批量取。如果频率很快的话,建议还是把关键字保存在内存或memcached中吧,几十万条的数据量应该不大吧,主要的关键字放在内存中应该不会有问题吧(假设一个key占100b(很大了吧),100w个key也只有不到100M啊)。
15 楼 jasin2008 2008-09-09  
先select进行判断,再进行insert,串行化事务,效率怎样没试过。
14 楼 MeteorX 2008-09-09  
Oracle自带的 merge into 语句,不知道是否符合楼主的要求。
13 楼 HRoger 2008-09-09  
我觉得得取决于你的重复的概率有多大,如果概率非常小的话,建议用异常来处理,如果比较大的话还是采取查询后再插入
12 楼 hocus 2008-09-09  
vvgg 写道
hocus 写道
bluemeteor 写道
异常不是这么用滴!

做好索引,select count(*)来判断才是正道

我也同意
异常不应该被用于流程和业务逻辑判断





重复数据也可以看作一种异常吧


感觉有重复数据的几率远小于正常的几率,所以产生异常的代价和每次查询相比应该算小的。

重复数据是否看做异常状态,完全取决与业务
11 楼 wolfbrood 2008-09-09  
vvgg 写道
hocus 写道
bluemeteor 写道
异常不是这么用滴!

做好索引,select count(*)来判断才是正道

我也同意
异常不应该被用于流程和业务逻辑判断


重复数据也可以看作一种异常吧

感觉有重复数据的几率远小于正常的几率,所以产生异常的代价和每次查询相比应该算小的。

重复数据是一种业务逻辑,怎么是异常了。能用简单判断语句解决问题就绝不能用异常解决问题,这点道理都不明白吗?异常别滥用。
10 楼 vvgg 2008-09-09  
hocus 写道
bluemeteor 写道
异常不是这么用滴!

做好索引,select count(*)来判断才是正道

我也同意
异常不应该被用于流程和业务逻辑判断





重复数据也可以看作一种异常吧


感觉有重复数据的几率远小于正常的几率,所以产生异常的代价和每次查询相比应该算小的。
9 楼 hocus 2008-09-09  
freeman_sh 写道
如果数据库支持sequence,用sequence是最佳方案。

如果我应用有多台oracle数据库捏?
如果下一个客户不用oracle,用db2捏?
8 楼 hocus 2008-09-09  
bluemeteor 写道
异常不是这么用滴!

做好索引,select count(*)来判断才是正道

我也同意
异常不应该被用于流程和业务逻辑判断
7 楼 freeman_sh 2008-09-09  
如果数据库支持sequence,用sequence是最佳方案。
6 楼 javazhujf 2008-09-09  
有索引的话单表查询还是挺快地(如果慢的话说明你DB的硬件太差了……),如果想把两次DB访问变成一次的话可以在SQL中追加begin和end,做条件判断。
5 楼 wolfbrood 2008-09-09  
vvgg 写道
设为主键,重复捕捉异常

坚决反对这种用法,异常不能这么用,每次异常都会消耗系统很多资源。

方法1:就是先把数据插入一个临时表,然后通过sql找出临时表里面哪些数据在正式表里面没有,然后把这些数据插入正式表。至于怎么找没有重复的数据那就是你的事,数据库存储过程可以完成,也可以写程序一条一条的读出。
这个方法避免了每次插入都要查找一次,但不一样的数据就要插入两次。至于效率问题你可以自己慢慢调优。

方法2:写trigger,在插入之前做一个查询,如果有就抛弃,没有就插入数据

4 楼 bluemeteor 2008-09-09  
异常不是这么用滴!

做好索引,select count(*)来判断才是正道

相关推荐

    几种数据库的大数据批量插入

    特别是在处理大量数据时,批量插入可以大大提高数据库的写入效率。今天,我们将讨论几种数据库的大数据批量插入,包括 Oracle 和 SqlServer。 首先,让我们来看一下 IBatcherProvider 接口。这个接口是用于实现批量...

    C#大数据批量插入Access程序

    本程序" C#大数据批量插入Access程序 "就是针对这种需求而设计的,它允许开发者高效地将大量数据导入到Access数据库中。 Access数据库虽然在处理大规模数据时可能不如SQL Server等大型数据库系统强大,但在某些场景...

    ORACLE数据库中插入大字段数据的解决方法

    在ORACLE数据库中插入大字段数据时,可能会遇到性能问题或者由于字段长度限制导致的错误。这类问题通常涉及LOB(Large Object)类型的字段,如CLOB(Character Large Object)和BLOB(Binary Large Object)。本篇...

    insert和select结合实现”插入某字段在数据库中的最大值+1″的方法

    本文是mysql 数据库 问题一 将表一的数据导入表二...在表中插入数据时,某一字段取数据库中该字段的最大值,并+1,这个问题很多人都说用存储过程什么的解决,其实使用insert 和 select 结合就可以很好的解决这个问题啊

    Sqlite数据库里插入数据的条数上限是500

    今天在向Sqlite数据库里插入数据的时候,报了这样一个错: 代码如下: “too many terms in compound SELECT” 去Stackoverflow上查了一下,发现有人回答这个问题:链接 原来一次性向数据库里插入数据的条数不能太...

    c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)

    在C#中,进行大数据批量插入到不同的数据库如SQL Server、Oracle、SQLite和MySQL时,开发者需要考虑每个数据库系统的特性和API。以下是对这四种数据库批量插入操作的详细讲解: 1. **SQL Server批量插入** SQL ...

    c#实现几种数据库的大数据批量插入

    在C#中,可以创建一个事务,然后在一个循环中插入多条记录,确保所有插入都在一个事务中执行,以提高效率。 4. MySQL数据批量插入: MySQL也支持批量插入,可以使用`MySqlBulkLoader`类。创建这个类的实例,设置...

    Sqlserver大数据量插入速度慢或丢失数据的解决方法

    面对SQL Server在大数据量插入时出现的速度慢及数据丢失的问题,可以通过使用函数进行批量插入或采用BULK INSERT等命令来提高插入效率和数据完整性。这两种方法各有优缺点,根据实际情况选择合适的方案可以有效提升...

    C# Access 大数据量 批量 效率 快速 导入

    在C#中,可以创建一个DataSet或DataTable来存储待插入的数据,然后一次性将这些数据提交到数据库,显著提高导入速度。 以下是一些实现这一目标的关键知识点: 1. **批处理操作**:批处理是指一次性处理多个数据库...

    socket 大数据并列接收存数据库小列子(带多线程模拟数据)

    在处理大数据时,可能需要考虑分片(Sharding)、分区(Partitioning)或者批量插入(Bulk Insert)等策略,以提高写入效率和查询性能。此外,事务的正确性和一致性也很重要,尤其是在多线程环境下,需要确保数据的...

    vs自带数据库sql server的中文插入乱码问题、查找当前数据库名

    解决两个问题:vs自带数据库sql server的中文插入乱码问题、查找当前数据库名 (查找数据库名在文章中间,自己往下翻吧,不单拎出来了) vs自带数据库sql server的中文插入乱码问题: 如图所示,我插入表的中文变成...

    kettle对数据分表插入

    例如,我们可以计算输入数据的某个字段的哈希值,然后根据这个哈希值的模运算结果确定数据应该插入的子表。 哈希算法在这里起到了关键作用。常见的哈希函数如MD5、SHA-1等可以将任意大小的数据映射为固定长度的哈希...

    大数据领域的数据库有哪些分类

    在批处理数据库中,数据通常会被预先加载到内存中,然后通过并行计算的方式进行处理,从而大大提高了数据处理的速度。 - **例子**: Hive、Apache Pig等都是批处理数据库的代表。 **2. 流式处理数据库** - **特点**...

    上传文件及将大数据写入数据库并通过页面访问

    为了提高性能和减少内存占用,可以考虑使用分批次插入或者利用数据库自身的批量插入功能。 ### 四、通过页面访问已上传的数据 #### 4.1 查询数据库 使用SQL查询语句从数据库中检索已上传的文件信息。可以创建一个...

    JDBC批量插入 更新 删除等操作

    批量操作是指在一次数据库连接中执行多次SQL语句的操作,这种方式能显著提高程序性能,尤其是在处理大量数据时。 **批量插入**主要用于数据导入和日志记录等场景。例如,在日志系统中,通常会将日志信息先写入到...

    详细讲解提高数据库查询效率的实用方法

    21. **批量插入数据**:当需要大量插入数据时,采用批量插入的方式可以显著提高效率。 22. **优化删除操作**:在删除大量数据时,应避免一次性删除过多数据,可以考虑分批删除。 23. **合理使用存储过程**:存储...

    jdbc批量插入大字段

    在Oracle数据库中,Blob类型用于存储大量的二进制数据...总之,批量插入大字段是处理大量Blob数据的关键策略,通过JDBC提供的批处理功能,结合合理的事务管理和内存管理,可以显著提升Oracle数据库中的大数据插入效率。

    大数据知识点mysql数据库

    MySQL 数据库知识点总结 MySQL 是一种关系型数据库管理系统,目前版本为 5.7。在学习 MySQL 之前,需要了解数据库的发展阶段:人工阶段、文件系统阶段和数据库阶段。常见的主流数据库有 MySQL、Oracle、SQL Server ...

Global site tag (gtag.js) - Google Analytics