【问题标题】:Column oriented database related面向列的数据库相关
【发布时间】:2014-07-27 23:06:31
【问题描述】:

伙计们,

我目前已经开始阅读与 NOSQL 相关的数据库,因为我目前正在研究与数据库仓库相关的应用程序。

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

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

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

test|test1 一起和 5|10 一起。

键 1:{名称:测试,值:5} 键 2:{名称:test1,值: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 ) 在面向列的数据库中,连接是如何在内部进行的?

【问题讨论】:

    标签: cassandra hbase nosql-aggregation nosql


    【解决方案1】:

    好问题, 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:test>

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

    但在 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 数据存储不支持连接。它们不适用于连接。

    希望对你有所帮助。

    【讨论】:

    • 亲爱的 kkmishra,我想在你的笔记上理解下面的内容。基本上我试图了解 NOSQL 的内部来决定是否将它用于我们的新应用程序。注意:-您可以使用键选择行,也可以使用二级索引在其他列上使用某些条件。
    • 1) 如何在 NOSQL 中检索单个 raw (我相信它必须检查不同的磁盘块才能检索 singleraw 并且它不是连续的。)是否有任何主索引,如 columnArray['rawKey'] = columnValue 2)如何使用列条件检索值我的意思是如何维护二级索引?你能像我第一次那样提供样品吗?
    • 1) 单行键数据驻留在单个节点上,即在通过单行键获取的情况下无需从多个节点读取数据,它将来自单个节点。 2)在辅助表的情况下,每个节点只索引它在本地保存的数据,因此在这种情况下,读取也将发生在单个节点上。
    • 感谢您的回复,但显然我最初的问题是为什么 CASSANDRA、HBASE 等不支持聚合函数。在我看来,聚合函数应该在 NOSQL db 中执行更少的 I/O。参考博客stackoverflow.com/questions/23532128/…
    猜你喜欢
    • 2013-09-20
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2010-10-19
    • 2021-10-04
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多