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

Postgresql 用于大数据导入和快速查找的SQL或noSQL数据库?,postgresql,cassandra,nosql,Postgresql,Cassandra,Nosql,我想: 从csv文件中读取几个100 GB>将某些列转换为特定格式>保存到DB。这应该每天运行几次 使用4个参数查询数据库,并按属性(如PRICE ASC)对结果排序,然后选择最前面的条目 Postgres通常表现良好,即:1-2 GB/min(使用java)。 当我将索引放在用于选择的4个参数上时,选择也非常好 不过,在导入几百GB时需要“很长”的时间 问题:使用类似ApacheCassandra的noSQL引擎进行同样的尝试是否值得? 我的意思是: 对于海量数据插入,noSQL DB能

我想:

  • 从csv文件中读取几个100 GB>将某些列转换为特定格式>保存到DB。这应该每天运行几次
  • 使用4个参数查询数据库,并按属性(如PRICE ASC)对结果排序,然后选择最前面的条目
Postgres通常表现良好,即:1-2 GB/min(使用java)。 当我将
索引
放在用于选择的4个参数上时,选择也非常好

不过,在导入几百GB时需要“很长”的时间

问题:使用类似ApacheCassandra的
noSQL
引擎进行同样的尝试是否值得? 我的意思是:

  • 对于海量数据插入,noSQL DB能更快吗
  • 我可以基于几个参数从noSQL中检索一行,速度和在索引postgres db中一样快吗

Cassandra建立在查询驱动的建模之上。因为您知道您的查询(并且假设您想要对四个参数进行相等检查),所以如果您对数据建模正确,您应该能够获得惊人的查询速度

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

拷贝并不是真正用于大规模生产的。要么编写一个导入程序,使用java客户机对futures进行异步写入,要么执行SSTable路由。另一个好的替代方法是使用Spark和Spark Cassandra连接器将CSV RDD转发到Cassandra表。当然,您需要一个spark集群来工作(尽管根据机器功率/负载的不同,您可能会使用单节点spark独立进程——在这种情况下,您获得的是简单性)。spark代码如下所示:

sc.textFile(“csv.csv”).split(“,”[…transforms..).saveToCassandra('ks','table');

如果您只是简单地尝试并测量一下,就会得到更好的答案。我认为传输速率是由网络速度决定的,而不是持久性机制。我猜呢?完全没有区别。为什么导入速度慢?你的过程中哪一部分表现不好?如何保存到DB?单次插入的速度很慢,单次事务中的多次插入速度更快,复制速度也非常快。我正在使用
COPY FROM STDIN。。。CSV
。瓶颈是数据库,我几乎不需要任何时间来处理。我正在导入到一个没有索引的
未标记的
表中。我认为以2GB/min的速度批处理到postgres一点也不差。但我希望迁移到noSQL可能会使我的导入比postgres快得多?