面向列的数据库相关

时间:2014-06-06 15:47:07

标签: cassandra hbase nosql-aggregation nosql

民间,

我目前已经开始阅读有关NOSQL相关数据库的文章,目前正致力于数据仓库相关应用程序。

我有以下问题。我已经阅读了基础知识。

问题1)如果将具有相同列的数据存储在一起,如何在面向列的数据库中重新检索整个原始数据?

假设我们以下列格式存储数据,因此在内部它将像这样存储在面向列的数据库中。

一起测试| test1和5 | 10一起。

键1:{name:test,value:5} 键2:{name:test1,value:10}

因此,如果我们必须检索key1的数据,它是如何发生的? (A和B是我的猜测)

A)如果必须单独从每个列存储中选择数据,那么它将非常昂贵

B)是否有任何索引机制来获取给定原始密钥的所有列的数据?

问题2)

我正在阅读一些文档,发现面向列的数据库更适合在单列上运行聚合函数,因为I / O会更少。

我没有在像Cassandra和HBASE这样的NOSQL列导向存储中找到对SUM,AVG等聚合函数的适当支持。 (可能会有一些调整/黑客/更多代码编写如下)

How does Apache Cassandra do aggregate operations? realtime querying/aggregating millions of records - hadoop? hbase? cassandra? How to use hbase coprocessor to implement groupby?

问题3)在面向列的数据库内部如何进行连接是否可取?

1 个答案:

答案 0 :(得分:0)

好问题, 1)在Cassandra中,如果你使用的是cqlsh,那么它看起来就像你在mysql或其他一些rdbms商店中存储数据一样。

Connected to Test Cluster at localhost:9160.
[cqlsh 3.1.7 | Cassandra 1.2.9 | CQL spec 3.0.0 | Thrift protocol 19.36.0]
Use HELP for help.
cqlsh> create keyspace test with replication={'class':'SimpleStrategy', 'replication_factor': 1
         <value>  
cqlsh> create keyspace test with replication={'class':'SimpleStrategy', replication_factor': 1};
cqlsh> USE test ;
cqlsh:test> create table entry(key text PRIMARY KEY, name text, value int );
cqlsh:test> INSERT INTO entry (key, name , value ) VALUES ( 'key1', 'test',5);
cqlsh:test> INSERT INTO entry (key, name , value ) VALUES ( 'key2', 'test1',10);
cqlsh:test> select * from entry;

 key  | name  | value
------+-------+-------
 key1 |  test |     5
 key2 | test1 |    10

cqlsh:试验&gt;

注意: - 您可以使用键选择行,或使用二级索引在其他列上使用某些条件。

但是在hbase中,结构将如下所示

rowkey | column family | column | value
key1   | entry         | name   | test
key1   | entry         | value  | 5
key2   | entry         | name   | test1
key2   | entry         | value  | 10

注意: - 您可以使用键或任何列值选择每一行非常容易。

2)是的,nosqls也支持DML的批量操作。

3)nosqls数据存储区中不支持联接。它们不适用于连接。

希望它会对你有所帮助。