标签 数据库 下的文章

随着数据的飞速增长,数据的组织变得至关重要。本文将简要介绍当今软件开发中最流行的数据库。

在软件系统中,数据被格式化地组织和存储,通过数据库可以以电子方式访问它们。因为数据已经成为一种非常重要的资产,对我们来说,掌握当今使用的各种数据库的基本知识是非常重要的。

我们要看的第一个数据库是 MySQL。

MySQL

MySQL 官网

MySQL 是使用最广泛的开源数据库管理系统之一。它由 甲骨文公司 Oracle Corporation 所有。它可以在大多数主流操作系统上运行,如 Windows、MacOS、Linux 等。MySQL 既适用于小型应用,同时也能胜任大型应用。

优点

  • 适配各种操作系统
  • 适配多种编程语言,如 PHP、C、C++、Perl 等
  • 开源、免费
  • 它支持高达 8 百万 Tb 的巨大数据量
  • 可定制化
  • 比其他数据库快得多

要在基于 Ubuntu 的计算机上安装并使用 MySQL,使用下面的命令:

$sudo apt update
$sudo apt install mysql-server
$sudo systemctl start mysql.service

MariaDB

MariaDB 官网

MariaDB 是一款由 MySQL 的开发人员开发的开源关系型数据库,因其优秀的性能和与 MySQL 良好的兼容性而广受欢迎。它是当今大多数主要云产品的一部分,对其稳定性和性能起到重要作用。最近通过使用 Galera Cluster 技术,MariaDB 新增了集群功能。另外 MariaDB 还与 Oracle 数据库有(一定的)兼容性。

优点

  • 安装方便
  • 支持大数据操作
  • 高可扩展性
  • 易于导入数据

要在基于 Ubuntu 的计算机上安装并使用 MariaDB,请使用以下命令:

$sudo apt update
$sudo apt install mariadb-server
$sudo systemctl start mariadb.service

RethinkDB

RethinkDB 官网

RethinkDB 是一个开源、免费、分布式、基于文档的 NoSQL 数据库。它由 RethinkDB 公司开发。(LCTT 译注:RethinkDB 公司已于 2016 年倒闭。RethinkDB 数据库现作为开源项目继续维护。消息来源)它可以存储具有动态模式的 JSON 文件。更重要的是,它可以将查询结果的实时更新推送给应用程序。由于它的分布式特性,它具有高度可扩展性。RethinkDB 提供了丰富的内置函数,使其成为一个高可用性的数据库。由于它是当今流行的数据库,学习如何使用它是很重要的。

优点

  • 适合于 Web 应用
  • 易于扩展
  • 内置函数多,可用性高
  • 基于 JSON 动态文档

要在基于 Ubuntu 的计算机上使用 RethinkDB,下面的命令会有帮助:

# 添加软件仓库源 
source /etc/lsb-release && echo "deb https://download.rethinkdb.com/repository/ubuntu-$DISTRIB_CODENAME $DISTRIB_CODENAME main" | sudo tee /etc/apt/sources.list.d/rethinkdb.list

# 下载并安装 RethinkDB 的 GPG 密钥
$wget -qO- https://download.rethinkdb.com/repository/raw/pubkey.gpg | sudo apt-key add - 

$sudo apt update
$sudo apt-get install rethinkdb
$sudo systemctl start rethinkdb

OrientDB

OrientDB 官网

OrientDB 是一个基于 Java 的开源 NoSQL 数据库管理系统。它支持多种数据模型,比如文档、字典、对象和图。它以图数据库的形式存储关系。下面的命令可以帮助你在 Ubuntu 机器上使用 OrientDB:

$sudo apt-get update
$wget -O orientdb-community-2.2.20.tar.gz http://orientdb.com/download.php?file=orientdb-community-2.2.20.tar.gz&os=linux
$tar -zxvf orientdb-community-2.2.20.tar.gz
$sudo mv ~/orientdb-community-2.2.20 /opt/orientdb

CouchDB

CouchDB 官网

CouchDB 是用 Erlang 开发的开源 NoSQL 数据库。它使用多种协议和格式来传输、处理和共享数据。它使用 JSON 格式存储数据,支持 MapReduce,并用 JavaScript 作为查询语言。

优点

  • 可以存储任何类型的数据
  • 支持 MapReduce,可以高效地处理数据
  • 整体结构非常简单
  • 索引和检索速度快

下面的命令可以帮助你在 Ubuntu 机器上使用 CouchDB:

$echo "deb https://apache.bintray.com/couchdb-deb focal main" >> /etc/apt/sources.list
$sudo apt-get update
$sudo apt install apache2 couchdb -y

Firebird

Firebird 官网

Firebird 是一个开源关系型数据库。它兼容所有操作系统,如 Linux、Windows 和 MacOS。它最初是从开源数据库 Interbase 派生而来的。

优点

  • 数据库功能不受限制
  • 非常稳定,功能强大
  • 配置和使用简单

以下命令可以帮助你在 Ubuntu 机器上使用 Firebird:

$sudo apt-get update
$sudo apt-get install firebird2.5-superclassic

Cassandra

Cassandra 官网

Cassandra 是一个 Apache 基金会旗下的 NoSQL 数据库。它具有高度可扩展性、分布式、高性能的特点,可以很好地处理大量数据。其分布式的特性,使它没有单点故障。

优点

  • 高性能
  • 高可扩展性
  • 采用点对点架构

以下命令可以帮助你在 Ubuntu 机器上使用 Cassandra:

$curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add -
$sudo apt-get update
$sudo apt-get install cassandra
$sudo systemctl enable cassandra
$sudo systemctl start cassandra

PostgreSQL

PostgreSQL 官网

如今,PostgreSQL 是最流行的开源关系数据库管理系统之一。它易于扩展,同时还与 SQL 兼容。这个数据库管理系统经过了 30 多年的积极开发。

优点

  • 与 MySQL 相比,Postgres 可以存储更多种类的数据
  • 支持几乎所有的 SQL 特性
  • 高度可扩展

下面的命令可以帮助你在 Ubuntu 机器上使用 PostgreSQL:

$sudo apt-get update
$sudo apt-get install postgresql postgresql-contrib

CockroachDB

CockroachDB 官网

CockroachDB 是一个为可靠性而生的数据库。它可以像 蟑螂 cockroach 一样在灾难性的情况下顽强生存、蓬勃发展。它可以处理大量的数据。还可以构建多集群数据库。

优点

  • 很容易部署
  • 高一致性
  • 分布式事务
  • 高可用性
  • 兼容 SQL

Redis

Redis 官网

Redis 是一个基于键值的开源 NoSQL 数据存储数据库。它支持各种类型的键,使用非常方便。

结语

我们已经浏览了最知名和最流行的开源数据库管理系统。了解这些不同的数据库非常有趣。尝试不同的选择,发现最适合你需求的数据库。另外,一定要查看这些数据库的官方文档。

(题图:MJ/40ba9f14-5948-431a-a899-36c6b1ff4dfe)


via: https://www.opensourceforu.com/2022/09/are-you-familiar-with-these-popular-open-source-databases/

作者:Jishnu Saurav Mittapalli 选题:lkxed 译者:toknow-gh 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

开源的 Apache SeaTunnel 项目是一个数据整合平台,可以很容易地实现数据同步。

变更数据捕获 Change Data Capture (CDC)使用服务端代理来记录、添加、更新和删除对数据表的各种操作。它以一种易用的关系型格式提供了数据变化的细节信息。它可以捕获将更改应用于目标环境中的已修改行所需的列信息和元数据。这些信息保存在一个与被跟踪的源表的列结构相对应的变化表内。

捕获变更的数据可不是一件容易的事。不过,有一个开源项目 —— Apache SeaTunnel,它是一个数据整合平台,它提供的 CDC 功能的设计理念和功能集使这些捕获成为可能,其功能包括上文提到的,超越了现有产品的解决方案。

使用场景

CDC 的经典应用是异质数据库之间的数据同步或备份。你可以在 MySQL、PostgreSQL、MariaDB 和类似的数据库间进行数据同步。另外一个例子,你也可以将数据同步到应该全文搜索引擎。借助 CDC,你可以基于 CDC 捕获的数据创建备份。

如果设计得当,数据分析系统通过订阅目标数据表的变化情况获取需要处理的数据,而不需要将分析过程嵌入已有系统。

在微服务间共享数据状态

微服务现在很流行,但是在微服务间共享信息往往是一件复杂的事。CDC 是一个可能的解决方案。微服务可以使用 CDC 来获取其他微服务的数据库变化,获取数据状态更新,以及执行相应逻辑。

更新缓存

命令查询责任隔离 Command Query Responsibility Segregation CQRS)的概念是将命令活动与查询活动分开。这两者有本质上的不同:

  • 命令向数据源写入数据。
  • 查询从数据源读取数据。

问题是,读事件发生的时间与写事件发生的时间有关,以及这些事件的发生是由谁来承担责任的?

更新缓存可能很困难。你可以使用 CDC 从数据库获取数据更新事件,让它控制缓存的更新或失效。

CQRS 设计通常使用两种不同的存储实例来支持业务查询和变更操作。为了保证数据的一致性,我们可以使用分布式事务来保证强大的数据一致性,代价是可用性、性能和扩展性。你也可以使用 CDC 来确保最终的数据一致性,它的性能和伸缩性较好,但其代价是数据延迟,目前业界可以保持在毫秒范围内。

例如,你可以使用 CDC 把 MySQL 中的数据同步到你的全文搜索引擎(比如ElasticSearch)。在这种架构中,ElasticSearch 搜索了所有的查询,但是当你需要修改数据时,你不能直接操作 ElasticSearch 的,你需要修改上游的 MySQL 数据,因而生成了一个更新事件。当 ElasticSearch 监视数据库时,这个事件就被系统获取了,并在 ElasticSearch 中提示更新。

在一些 CQRS 系统中,也可以用类似的方法更新查询视图。

痛点

CDC 不是一个新概念,很多现有的项目已经实现了它。但是对很多用户来说,已有解决方案存在一些不足。

单数据表配置

当你使用一些 CDC 软件时,你必须分别配置每个表。例如,为了同步十张表,你需要写十条 源 SQL 和 汇聚 Sink SQL 语句。为了进行转换操作,你也需要写与转换相关的 SQL 语句。

有时候,对于一张表来说可以手写,但只对数据量小的情况适用。当数据量大时,会发生类型映射或参数配置的错误,进而导致较高的操作和维护成本。

SeaTunnel 是一个易用的数据集成平台,有望解决这个问题。

不支持模式演化

一些 CDC 解决方案支持 DDL 事件传递,但不支持传递到 汇聚节点 Sink ,以便它能进行同步变更。由于无法根据 DDL 事件改变转换的类型信息,所以即使一个能获取事件的 CDC 也不一定可以将它发送至引擎(所以汇聚节点不能遵循 DDL 事件来进行变更)。

太多的链接

在一些 CDC 平台上,当有多个表时,如果一张表被同步了,就必须使用一个链接来代表一张表。当存在多个表时,也需要很多链接。这就给源 JDBC 数据库带来了压力,同时导致binlog 过多,还会导致重复的日志解析。

SeaTunnel CDC 架构的目标

Apache SeaTunnel 是一个开源、高效、分布式、大规模的数据集成框架。为了解决现有数据集成工具解决不了的问题,开发者社区“重新造轮子”,开发了一种具有独特功能的 CDC 平台。它的架构设计吸收了现有工具的优点,消除了相应的缺点。

Apache Seatunnel 支持:

  • 以无锁并行的方式快照历史数据。
  • 日志心跳检测和动态添加数据表。
  • 读取子数据库、子表和多结构表。
  • 模式演进。
  • 所有基础的 CDC 功能。

它降低了用户的操作和维护成本,并且支持动态添加数据表。

例如,当你要同步整个数据库,并在稍后需要添加一个新表,你不必手动维护、改变配置或重启当前作业。

另外,Apache SeaTunnel 也支持并行读取子数据库、子表和多结构表。还支持模式演进、DDL 转换,以及在引擎内改变支持的模式,这些可以变为 转换器 Transform 汇聚节点 Sink

SeaTunnel CDC 现状

如今,CDC 拥有支持增量和快照阶段的基本能力。它也支持 MySQL 实时和离线使用。MySQL 实时测试已完成,即将进行离线测试。因为它涉及对转换器和汇聚节点的更改,目前还不支持模式。不支持动态发现新增表,已预留了一些支持多结构表的接口。

项目展望

作为 Apache 孵化的项目,Apache SeaTunnel 的社区正快速发展起来。下一届社区计划会议的主要目标有:

1、发展并改进连接器和目录生态

我们正努力改善连接器和目录功能,包括:

  • 支持连接更多数据库,包括 TiDB、Doris 和 Stripe。
  • 改善现有的连接器的易用性和性能。
  • 支持 CDC 连接器用于实时、增量同步场景。

任何对连接器感兴趣者都可以查看 Umbrella

2、支持更多数据集成场景(SeaTunnel 引擎)

现有的引擎仍然存在一些解决不了的痛点,例如对整个数据库的同步,表结构变化的同步以及任务失败的大粒度。

我们正努力解决这些问题,对此感兴趣者可以查看 #2272 议题

3、更易使用(Web 版)

我们正努力提供 Web 界面,令操作更简便。通过 Web 界面,我们将实现以 DAG/SQL 的形式查看目录、连接器、任务和相关信息。我们也会给予用户访问调度平台的权限,以便更方便地进行任务管理。

欲了解更多关于 Web 版的信息,请访问 Web 平台子项目

总结

数据库活动通常必须被仔细跟踪,才能对数据的更新、删除或添加操作进行管理。CDC 提供了这种功能。Apache SeaTunnel 是一个开源解决方案,能满足这些需求,它将持续迭代更新,从而提供更多功能。该项目和社区也很活跃,欢迎你的加入。

(题图:MJ:database connections illustration in high resolution, very detailed, 8k)


via: https://opensource.com/article/23/3/synchronize-databases-apache-seatunnel

作者:Li Zongwen 选题:lkxed 译者:cool-summer-021 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

数据库损坏导致全美停飞航班

周三,美国联邦航空局(FAA)的空中任务通知系统发生严重故障,一度导致全美停飞航班。FAA 初步判断问题根源是一个数据库文件受损,而没有证据表明这是一次网络攻击。周二晚间 FAA 的计算机系统就出现了问题,于是他们在周三凌晨航班最少的时候重启了系统。但在经过 90 分钟的重启之后,该系统的功能没有完全恢复,而备份系统也同样发现存在问题。FAA 于是下达了全美的停飞令,导致了大规模航班延误和机场瘫痪。

消息来源:CNN
老王点评:你真想不到一些非常重要的系统有多破旧。

因员工监控软件显示摸鱼,被勒令向公司返回工资

一名加拿大女子以远程方式从事会计工作,她最初声称自己去年被无故解雇,并要求获得赔偿。但该公司告诉法庭,该员工有 50 多个小时没有从事工作有关的任务。该公司说,在发现该员工分配的工作超出预算和进度后,该公司在其工作笔记本上安装了名为 TimeCampon 的员工追踪软件。该软件可以跟踪文件打开的时间,员工如何使用该文件,并将时间记录为工作时间。该软件可以将工作时间记录与使用笔记本电脑播放电影和电视节目等活动分开。法官因此判决该女子败诉并向公司返回部分工资。

消息来源:《卫报》
老王点评:真是,都不能愉快的摸鱼了。

谷歌将在 Chrome 开发中使用 Rust

谷歌今天宣布,他们将允许 Rust 代码进入 Chromium 代码库。谷歌正在努力将 Rust 工具链引入他们的 Chromium 构建系统,并将允许在 Chrome/Chromium 中使用 Rust 库。在 Chromium 中使用 Rust 可以避免内存安全错误,这将有助于加快开发速度,提高 Chrome/Chromium 浏览器的整体安全性。

消息来源:Phoronix
老王点评:继安卓之后,谷歌又将 Rust 加入到 Chrome 开发中,这将对改善浏览器安全有很大的意义。

PostgreSQL 是最灵活的数据库之一,并且它是开源的。

数据库是以一种有组织且灵活的方式存储信息的工具。电子表格在本质上就是一个数据库,但是图形化应用程序这一限制使得大多数的电子表格应用程序对程序员毫无用处。随着 边缘计算 和物联网设备成为重要的平台,开发者们需要更有效且轻量级的方法,来存储、处理、查询大量的数据。我最爱的一种组合是使用 Lua 连接 PostgreSQL 数据库。无论你使用什么编程语言,PostgreSQL 一定是数据库的绝佳选择,但是在使用 PostgreSQL 之前,首先你需要知道一些基本的东西。

安装 PostgreSQL

在 Linux 上安装 PostgreSQL,要使用你的软件库。在 Fedora,CentOS,Megeia 等类似的 Linux 版本上使用命令:

$ sudo dnf install postgresql postgresql-server

在 Debian, Linux Mint, Elementary 等类似的 Linux 版本上使用命令:

$ sudo apt install postgresql postgresql-contrib

在 macOs 和 Windows 上,可以从官网 postgresql.org 下载安装包。

配置 PostgreSQL

大多数发行版安装 PostgreSQL 数据库时没有启动它,但是为你提供了一个脚本或 systemd 服务,能够可靠地启动 PostgreSQL。但是,在启动 PostgreSQL 之前,必须创建一个数据库集群。

Fedora

在 Fedora,CentOS 等类似的版本上,PostgreSQL 安装包中提供了一个 PostgreSQL 配置脚本。运行这个脚本,可以进行简单地配置:

$ sudo /usr/bin/postgresql-setup --initdb
[sudo] password:
 * Initializing database in '/var/lib/pgsql/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

Debian

在基于 Debian 的发行版上,在安装 Postgres 的过程中,配置会通过 apt 自动完成。

其他版本

最后,如果你是在其他版本上运行的,那么你可以直接使用 PostgreSQL 提供的一些工具。initdb 命令会创建一个数据库集群,但是这个命令必须在 postgres 用户下运行,你可以使用 sudo 来暂时地成为 postgres 用户:

$ sudo -u postgres \
    "initdb -D /var/lib/pgsql/data \
    --locale en_US.UTF-8 --auth md5 --pwprompt"

运行 PostgreSQL

现在,数据库集群已经存在了,使用 initdb 的输出中提供给你的命令或者使用 systemd 启动 PostgreSQL 服务器:

$ sudo systemctl start postgresql

创建一个数据库用户

使用 createuser 命令来创建一个数据库用户。postgres 用户是 Postgres 安装的超级用户。

$ sudo -u postgres createuser --interactive --password bogus
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
Password:

创建一个数据库

使用 createdb 命令来创建一个新的数据库。在这个例子中,我创建了数据库 exampledb,并把该数据库的拥有者分配给用户 bogus

$ createdb exampledb --owner bogus

与 PostgreSQL 交互

你可以使用 psql 命令来与 PostgreSQL 中的数据库进行交互。这个命令提供了一个交互界面,所以你可以用它来查看和更新你的数据库。你需要指定要使用的用户和数据库,来连接到一个数据库。

$ psql --user bogus exampledb
psql (XX.Y)
Type "help" for help.

exampledb=>

创建一个表

数据库包含很多表。这些表可以可视化为表格,有很多行(在数据库中称为 记录)和很多列。行和列的交集称为 字段

结构化查询语言(SQL)是以它提供的内容而命名的,它能提供可预测且一致的语法,来查询数据库内容,从而收到有用的结果。

目前,你的数据库是空的,没有任何的表。你可以用 CREATE 语句来创建一个表。结合使用 IF NOT EXISTS 是很有用的,它可以避免破坏现有的表。

在你创建一个表之前,想想看你希望这个表包含哪一种数据(在 SQL 术语中称为“数据类型”)。在这个例子中,我创建了一个表,包含两列,有唯一标识符的一列和最多九个字符的可变长的一列。

exampledb=> CREATE TABLE IF NOT EXISTS my_sample_table(
exampledb(> id SERIAL,
exampledb(> wordlist VARCHAR(9) NOT NULL
);

关键字 SERIAL 并不是一个数据类型。SERIALPostgreSQL 中的一个特殊的标记,它可以创建一个自动递增的整数字段。关键字 VARCHAR 是一个数据类型,表示限制内字符数的可变字符。在此例中,我指定了最多 9 个字符。PostgreSQL 中有很多数据类型,因此请参阅项目文档以获取选项列表。

插入数据

你可以使用 INSERT 语句来给你的新表插入一些样本数据:

exampledb=> INSERT INTO my_sample_table (wordlist) VALUES ('Alice');
INSERT 0 1

如果你尝试在 wordlist 域中输入超过 9 个字符,则数据输入将会失败:

exampledb=> INSERT INTO my_sample_table (WORDLIST) VALUES ('Alexandria');
ERROR:  VALUE too long FOR TYPE CHARACTER VARYING(9)

改变表或者列

当你需要改变一个域的定义时,你可以使用 ALTER 这一 SQL 关键字。例如,如果你想改变 wordlist 域中最多只能有 9 个字符的限制,你可以重新设置这个数据类型。

exampledb=> ALTER TABLE my_sample_table
ALTER COLUMN wordlist SET DATA TYPE VARCHAR(10);
ALTER TABLE
exampledb=> INSERT INTO my_sample_table (WORDLIST) VALUES ('Alexandria');
INSERT 0 1

查询表中的内容

SQL 是一种查询语言,因此你可以通过查询来查看数据库的内容。查询可以是很简单的,也可以涉及连接多个不同表之间的复杂关系。要查看表中的所有内容,请使用 SELECT 关键字和 ** 是通配符):

exampledb=> SELECT * FROM my_sample_table;
 id |  wordlist
----+------------
  1 | Alice
  2 | Bob
  3 | Alexandria
(3 ROWS)

更多数据

PostgreSQL 可以处理很多数据,但是对于任何数据库来说,关键之处在于你是如何设计你的数据库的,以及数据存储下来之后你是怎么查询数据的。在 OECD.org 上可以找到一个相对较大的公共数据集,你可以使用它来尝试一些先进的数据库技术。

首先,将数据下载为逗号分隔值格式(CSV)的文件,并将文件另存为 Downloads 文件夹中的 land-cover.csv

在文本编辑器或电子表格应用程序中浏览数据,来了解有哪些列,以及每列包含哪些类型的数据。仔细查看数据,并留意错误情况。例如,COU 列指的是国家代码,例如 AUS 表示澳大利亚和 GRC 表示希腊,在奇怪的 BRIICS 之前,这一列的值通常是 3 个字符。

在你理解了这些数据项后,你就可以准备一个 PostgreSQL 数据库了。

$ createdb landcoverdb --owner bogus
$ psql --user bogus landcoverdb
landcoverdb=> create table land_cover(
country_code varchar(6),
country_name varchar(76),
small_subnational_region_code varchar(5),
small_subnational_region_name varchar(14),
large_subnational_region_code varchar(17),
large_subnational_region_name varchar(44),
measure_code varchar(13),
measure_name varchar(29),
land_cover_class_code varchar(17),
land_cover_class_name varchar(19),
year_code integer,
year_value integer,
unit_code varchar(3),
unit_name varchar(17),
power_code integer,
power_name varchar(9),
reference_period_code varchar(1),
reference_period_name varchar(1),
value float(8),
flag_codes varchar(1),
flag_names varchar(1));

引入数据

Postgres 可以使用特殊的元命令 \copy 来直接引入 CSV 数据:

landcoverdb=> \copy land_cover from '~/land-cover.csv' with csv header delimiter ','
COPY 22113

插入了 22113 条记录。这是一个很好的开始!

查询数据

SELECT 语句可以查询这 22113 条记录的所有列,此外 PostgreSQL 将输出通过管道传输到屏幕上,因此你可以轻松地滚动鼠标来查看输出的结果。更进一步,你可以使用高级 SQL 语句,来获得一些有用的视图。

landcoverdb=> SELECT
    lcm.country_name,
    lcm.year_value,
    SUM(lcm.value) sum_value
FROM land_cover lcm
JOIN (
    SELECT
        country_name,
        large_subnational_region_name,
        small_subnational_region_name,
        MAX(year_value) max_year_value
    FROM land_cover
    GROUP BY country_name,
        large_subnational_region_name,
        small_subnational_region_name
) AS lcmyv
ON
    lcm.country_name = lcmyv.country_name AND
    lcm.large_subnational_region_name = lcmyv.large_subnational_region_name AND
    lcm.small_subnational_region_name = lcmyv.small_subnational_region_name AND
    lcm.year_value = lcmyv.max_year_value
GROUP BY lcm.country_name,
    lcm.large_subnational_region_name,
    lcm.small_subnational_region_name,
    lcm.year_value
ORDER BY country_name,
    year_value;

下面是样例的一些输出:

---------------+------------+------------
 Afghanistan    |       2019 |  743.48425
 Albania        |       2019 |  128.82532
 Algeria        |       2019 |  2417.3281
 American Samoa |       2019 |   100.2007
 Andorra        |       2019 |  100.45613
 Angola         |       2019 |  1354.2192
 Anguilla       |       2019 | 100.078514
 Antarctica     |       2019 |  12561.907
[...]

SQL 是一种很丰富的语言,超出了本文的讨论范围。通读 SQL 的内容,看看你是否可以对上面的查询语句进行修改,以提供不同的数据集。

拓展数据库

PostgreSQL 是伟大的开源数据库之一。有了它,你可以为结构化数据设计存储库,然后使用 SQL 以不同的方式查询它,以便能够获得有关该数据的新视角。PostgreSQL 也能与许多语言集成,包括 Python、Lua、Groovy、Java 等,因此无论你使用什么工具集,你都可以充分利用好这个出色的数据库。


via: https://opensource.com/article/22/9/drop-your-database-for-postgresql

作者:Seth Kenlon 选题:lkxed 译者:chai001125 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

对用户而言,优秀的对外数据分析工具非常关键,因此选择合适的数据架构就显得尤为重要。

现如今,数据分析不再是仅面向内部开发人员。当为业务方构建数据分析系统时,你需要确认哪种数据库后端是最合适的。

程序员的本能可能是“选用自己了解的数据库(例如 PostgreSQL 或 MySQL)”。数据仓库也可能会扩展核心的 BI 仪表板和报告之外的功能,不过对业务方的数据分析支持仍是其重要功能之一,因此要选择合适的工具来保证此功能的性能。

问题的关键点在于用户体验,以下是对外支持数据分析工作的一些关键技术讨论点(以 Apache Druid 为例)。

低延迟特性

一直在队列中等待查询会让人很恼火。与延迟有关的因素包括数据量、数据库的处理能力、用户和 API 调用的数量,以及数据库支持查询应用的能力。

当数据量比较大时,有一些方法可以基于任意在线分析处理(OLAP)数据库构建交互式数据体验,但或多或少都有一些其他方面的牺牲。预计算查询会对性能要求较高,还会使架构变得僵化。预聚合处理会使数据粒度变大。将数据时间限制在近期的处理方式,会使得数据完整性得不到保证。

一个“不妥协”的解决方案是选择专为大规模交互而构建的优化架构和数据格式,Apache Druid 正是这样一个旨在支持现代分析程序的实时数据库。

  • 首先,Druid 具备特有的分布式弹性架构,可将数据从共享数据层预取到近乎无限容量的数据服务器集群中。这种架构与诸如云数据仓库这样的解耦查询引擎相比,具有更快的性能,因为它不需要移动数据,并且比像 PostgreSQL 和 MySQL 这样的纵向扩展数据库具有更高的可扩展性。
  • 其次,Druid 采用内置于数据格式中的自动多级索引来驱动每个内核去支持更多查询操作。在常规 OLAP 列格式基础之上,还增加了全局索引、数据字典和位图索引,这可以最大化利用 CPU 周期,加快处理速度。

高可用性

如果开发团队为内部报告搭建了一个后端,那么中断几分钟甚至更长时间真的很严重吗?实际上并不是的。所以在典型 OLAP 数据库和数据仓库中,计划外的停机和维护是可以允许的。

但是如果你们团队构建了一个对外的供客户使用的分析应用程序,如果发生数据中断,会严重影响客户满意度、收入,当然还有你的周末休息时间。这就是为什么弹性(高可用性和数据持久性)需要成为对外分析应用程序数据库中的首要考虑因素。

考虑弹性就需要考虑设计标准。节点或集群范围的故障能完全避免吗?丢失数据的后果有多严重?保障应用程序和数据需要涉及哪些工作?

关于服务器故障,保证弹性的常规方法是多节点服务以及 备份机制。但如果你是为客户构建应用程序,则对数据丢失的敏感性要高得多。偶尔的备份并不能完全解决这一问题。

Apache Druid 的核心架构内置了该问题的解决方案,本质是一种强大而简单的弹性方法,旨在保证承受任何变故都不会丢失数据(即使是刚刚发生的事件)。

Druid 基于对象存储中共享数据的自动、多级复制实现高可用性(HA)和持久性。它实现了用户期望的 HA 特性以及持续备份机制,即使整个集群出现问题,也可以自动保护和恢复数据库的最新状态。

多用户

一个好的应用应该同时兼备大用户量和“引人入胜”的体验,因此为高并发构建后端非常重要。你肯定不想看到因为应用挂掉而让客户沮丧。内部报告的架构不必考虑这点,因为并发用户数量要小得多且有限。所以现实是,用于内部报告的数据库可能并不适合高并发应用程序。

为高并发构建数据库主要在于取得 CPU 使用率、可伸缩性和成本之间的平衡点。解决并发问题的通常做法是投入更多硬件成本。逻辑上说,只要增加 CPU 的数量,就能够同时进行更多的查询操作。虽然事实确实如此,但成本的增加是不可忽视的。

更好的方法还是使用像 Apache Druid 这样的数据库,它具有优化的存储和查询引擎,可以降低 CPU 使用率。我们强调的关键词是“优化”。数据库不应该读取它不需要的数据。Apache Druid 可以让基础设施在同一时间跨度内为更多查询操作提供服务。

节省成本是开发人员使用 Apache Druid 构建外部分析应用程序的一个重要原因。Apache Druid 具有高度优化的数据格式,结合了从搜索引擎世界借鉴来的多级索引以及数据缩减算法,可以最大限度地减少所需的处理量。

最终表现就是 Apache Druid 提供了其他数据库不可比拟的处理效率。它可以支持每秒数十到数千跨度的 TB 甚至 PB 级别的查询。

着眼当下,预见未来

分析应用程序对于用户而言至关重要,所以要构建正确的数据架构。

你肯定不想一开始就选择了一个错误的数据库,然后在后续扩展时面对诸多令人头疼的问题。幸运的是,Apache Druid 可以从小规模开始,并在之后轻松扩展以支持任何可以想象的应用程序。Apache Druid 有 优秀的官方文档,当然它是开源的,所以不妨尝试一下并,快速上手吧。


via: https://opensource.com/article/22/4/apache-druid-open-source-analytics

作者:David Wang 选题:lkxed 译者:unigeorge 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

红帽 RHEL 9 发布

在红帽停止了 RHEL 下游发行版 CentOS,并以名称类似的滚动发行版 CentOS Stream 成为 RHEL 的上游后,引来了社区的巨大反响,并导致了若干接替 CentOS 的发行版出现。5 月 10 日,红帽基于 CentOS Stream 正式宣布了首个生产版本 RHEL 9。当前它还处于 Beta 阶段,将在未来几周内普遍提供,开发者也可以通过免费的红帽开发者计划获得。据红帽赞助的一项研究,全球 RHEL 的经济规模预计在 2022 年将超过 13 万亿美元。

消息来源:redhat
老王点评:虽然有免费的开发者计划可以让一些用户免费使用 RHEL,但是还是很可惜 CentOS 没了。

研究发现超过 150 万个被遗弃的移动应用

研究发现超过 65 万个 iOS 应用和大约 87 万个 Android 应用符合被遗弃应用的条件(至少两年没有更新)。其中,有大约 18 万个 iOS 应用和 13 万个安卓应用符合超级遗弃的条件(至少五年没有更新)。而根据另外一份数据,目前总计有 400 万个 iOS 应用和 300 万个 Android 应用。

消息来源:infoq
老王点评:虽然不更新有种种理由,但是这种被遗弃的应用还是应该被淘汰。

谷歌云推出 AlloyDB,比 AWS 同类产品快两倍

谷歌今天宣布推出 AlloyDB,这是一个新的完全管理的兼容 PostgreSQL 的数据库服务。谷歌称其交易工作负载的速度是 AWS 的同类 Aurora PostgreSQL 的两倍;比标准 PostgreSQL 快四倍,对于分析查询快 100 倍。AlloyDB 的核心是标准的 PostgreSQL 数据库,但谷歌对其内核做了一些改进,比如允许它将系统线性扩展到超过 64 个虚拟核心上。

消息来源:techcrunch
老王点评:PostgreSQL 某种程度上已经成为开源关系型数据库的事实标准,MySQL 已经有点没落了。