面向列的数据库相关

j91ykkif  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(331)

各位,
我现在已经开始阅读nosql相关的数据库,因为我正在研究数据库仓库相关的应用程序。
我有以下问题。我已经读过基础知识了。
问题1)当具有相同列的数据存储在一起时,如何在面向列的数据库中检索整个原始数据?
假设我们以以下格式存储数据,所以在内部它将像这样存储在面向列的数据库中。
测试|一起测试1,一起测试5 | 10。
键1:{名称:test,值:5}键2:{名称:test1,值:10}
那么,如果我们必须检索key1的数据,它是如何发生的呢(a和b是我的猜测)
a) 如果它必须分别从每一列存储器中提取数据,那么它的成本将非常高
b) 是否有任何索引机制来获取给定原始键的所有列的数据?
问题2)
我仔细阅读了一些文档,发现面向列的数据库更适合在单个列上运行聚合功能,因为i/o将更少。
在像cassandra和hbase这样的nosql面向列的存储中,我没有找到对sum、avg等聚合函数的适当支持可能会有一些调整/黑客攻击/更多的代码编写(如下所示)
apache cassandra如何进行聚合操作?实时查询/聚合数百万条记录-hadoop?hbase?如何使用hbase协处理器实现groupby?
问题3)在面向列的数据库中,连接是如何在内部发生的?

wztqucjr

wztqucjr1#

好问题,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>
note:- you 可以使用键选择行,也可以使用辅助索引对其他列使用某些条件。
但在hbase中,结构如下所示

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

note:- you 可以选择每一行使用键或任何列值它非常容易。
2) 是的,nosqls也只支持dmls的批处理操作。
3) 所有nosqls数据存储中都不支持联接。它们不是用来连接的。
希望对你有帮助。

相关问题