这是我的问题。
我想要摄取大量的数据......现在已有数百万甚至数十亿行。
我一直在使用MySQL,我现在正在使用PostgreSQL。
插入很简单,但在插入之前我想检查特定记录是否存在,如果存在,我不想插入。随着数据库的增长,这项操作(显然)需要更长时间。
如果我的数据在Hashmap中,则查找将是o(1)所以我认为我会创建一个Hash索引来帮助查找。但后来我才意识到,如果每次我都要大量减慢进程,我必须再次计算Hash(如果我不计算索引,我就没有o(1)查找)。
所以我处在一个quandry,有一个简单的解决方案吗?还是一个复杂的?我很乐意尝试其他数据存储,但是我需要能够进行相当复杂的查询,例如类似于带有WHERE子句的SELECT语句的东西,所以我不确定no-sql解决方案是否适用。
我是一个非常新手,所以如果有一个简单的解决方案,我不会感到惊讶。
答案 0 :(得分:2)
Nosql商店适合处理大量插入和更新
MongoDB具有基于文档是否存在的更新/插入(称为upsert)的非常好的功能。
从mongo doc
查看此页面http://www.mongodb.org/display/DOCS/Updating#Updating-UpsertswithModifiers
您也可以在mongo连接中查看安全模式。您可以将其设置为false以提高插入效率。
答案 1 :(得分:1)
您可以使用CouchDB。它没有SQL,所以你不能自己做查询,但你可以创建设计文档,允许你在数据上运行map / reduce函数。