【问题标题】:Does Google BigQuery/ Amazon Redshift use column-based relational database or NoSQL database?Google BigQuery/Amazon Redshift 使用基于列的关系数据库还是 NoSQL 数据库?
【发布时间】:2015-03-18 05:18:38
【问题描述】:

我仍然不太清楚基于列的关系数据库与基于列的 NoSQL 数据库之间的区别。

Google BigQuery 支持类似 SQL 的查询,那它怎么可能是 NoSQL?

我知道的基于列的关系数据库有 InfoBright、Vertica 和 Sybase IQ。

我知道的基于列的 NoSQL 数据库是 Cassandra 和 HBase。

以下有关 Redshift 的文章以“NoSQL”开头,但以使用 PostgreSQL(它是关系型)结尾: http://nosqlguide.com/column-store/intro-to-amazon-redshift-a-columnar-nosql-database/

【问题讨论】:

    标签: google-bigquery relational-database amazon-redshift nosql


    【解决方案1】:

    这里需要澄清几件事,主要是关于 Google BigQuery。

    BigQuery 是一个混合系统,允许您将数据存储在列中,但它通过附加功能(例如 record 类型)进入了 NoSQL 世界,并且nested 功能。您还可以有一个 2Mbyte STRING 列,您可以在其中存储原始文档,例如JSON 文档。请参阅其他适用的data formats and limits。您也可以用 Javascript 编写用户定义函数,例如:您可以粘贴到执行 NLP javascript 库的库中。

    现在您拥有存储数据的所有这些功能,您可以使用 JSON Functions 例如查询存储在其中一列中的文档,因此这可以用作无模式存储,因为您没有定义 JSON该列的文档结构,您只需将其存储为 JSON。明白了吗?

    从元列查询的基本示例,这是一个 JSON 文档,原因键,并执行包含语言构造以找出有多少用户在该键中具有“未订阅”字词:

    SELECT 
      SUM(IF(JSON_EXTRACT_SCALAR(meta,'$.reason') contains 'unsubscribed',1,0))  
    FROM ...
    

    另一方面,您有 table-wildcard querying。如果您的行跨多个表,则需要这样做。表通配符函数是一种从一组特定表中查询数据的经济高效的方法。当您使用表通配符函数时,BigQuery 只会访问与通配符匹配的表并向您收费。因此,这意味着建议将数据存储在类似的表中,只是在设定的时间范围内将数据存储在不同的表中,例如:每日表、每月表。

    我们不应忘记,BigQuery 只是在设计上附加,因此您无法更新旧记录,没有 UPDATE 语言结构更新:现在有DML language construct 来做一些更新/删除操作)。相反,您需要追加一条新记录,并且您的查询必须以始终使用最新版本数据的方式编写。如果您的系统是事件驱动的,那么这非常简单,因为每个事件都将附加在 BQ 中。但是如果用户更新了它的配置文件,你需要再次存储配置文件,你不能更新旧行。您需要有一个列版本/日期来告诉您哪个是最新版本,并且您的查询将首先编写以获取您的行的最新版本,然后处理逻辑。

    您可以通过该字段使用诸如 over/partition 之类的内容,并使用最新值 seqnum=1

    这从profile 返回,每个user_id 的最后一个emailtimestamp 列的最新条目定义。

    SELECT email
       FROM
         (SELECT email
                 row_number() over (partition BY user_id
                                    ORDER BY TIMESTAMP DESC) seqnum
          FROM [profile]
        )
       WHERE seqnum=1
    

    【讨论】:

      【解决方案2】:

      首先,请记住,NOSQL 通常被认为是“Not Only SQL”的缩写,因此系统同时具有 SQL 接口和一些 NOSQL 特性并不矛盾。 话虽如此,Redshift 和 BigQuery 都以基于列的数据库为基础。 Redshift 基于 Paraccel,Paraccel 是针对数据仓库的经典列式 RDBMS,而 BigQuery 则基于 Google 内部称为“dremel”的基于列的数据处理技术。

      【讨论】:

        猜你喜欢
        • 2017-07-04
        • 1970-01-01
        • 2014-07-22
        • 2011-05-08
        • 2017-03-19
        • 2019-04-18
        • 1970-01-01
        • 1970-01-01
        • 2011-02-06
        相关资源
        最近更新 更多