用于大数据导入和快速查找的SQL或noSQL数据库?

时间:2015-04-28 12:52:09

标签: postgresql cassandra nosql

我想:

  • 从csv文件中读取几个100 GB>将某些列转换为特定格式>保存到DB。这应该每天运行几次。
  • 使用4个参数查询数据库并按属性(例如PRICE ASC)对结果进行排序,然后选择TOP条目。

Postgres一般表现很好,意思是:1-2 GB /分钟(使用java)。 当我在用于选择的4个参数上放置for item in my_list: # First time you see an item create an empty list if item not in my_dict: my_dict[item] = [] # Otherwise, add the item to the list else: my_dict[item].append( item ) 时,选择也很好。

但是,导入几百GB时需要“很长”的时间。

问题:使用像index这样的noSQL引擎尝试使用此功能是否值得? 我的意思是:

  • 对于大量数据插入,noSQL DB可能更快
  • 我可以根据一些参数从noSQL中检索一行,就像索引的postgres db一样快吗?

1 个答案:

答案 0 :(得分:1)

Cassandra建立在查询驱动的建模之上。既然你知道了你的查询(假设你想要对四个参数进行相等检查),那么如果你对数据进行建模,你应该能够获得极快的查询速度。

Cassandra摄入也很快。但是,如果你有大量数据,通常的方法是将数据转换为SSTables(可能通过一些代码)和导入(这非常快)。如果这不可行,您可以执行并行异步权限。

COPY并非真正适用于大规模生产。编写一个使用java客户端对期货进行异步写入的导入器,或者使用SSTable路由。另一个好的选择是使用Spark和Spark Cassandra连接器将CSV rdds转发到cassandra表。当然,你需要一个火花集群才能工作(虽然取决于机器的功率/负载,你可以通过单个节点火花独立过程逃脱 - 在这种情况下你获得的是简单性)。火花代码看起来像:

sc.textFile("csv.csv").split(",").[...transforms..].saveToCassandra('ks', 'table');