gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

分类归档数据库

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  
  • 分类归档: "数据库"
  • ( 页面2 )
mysql, 大数据开发, 提示词 9月 7,2023

java批量生成海量测试数据及用ChatGPT提示语一键生成的方法

在做大数据开发时,为了测试性能等,需要上千万,甚至TB或PB级别的,在测试环境可能没有那么多数据,这时可以考虑进行造测试数据。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Random;

public class TestDataGenerator {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/your_database";
        String username = "your_username";
        String password = "your_password";
        int batchSize = 1000; // 每批次插入的数据量
        int totalRecords = 1000000; // 总共要生成的数据量

        try {
            Connection connection = DriverManager.getConnection(url, username, password);
            connection.setAutoCommit(false);

            String insertQuery = "INSERT INTO test (id, callid, type, ...其他列...) VALUES (?, ?, ?, ...其他值...)";
            PreparedStatement preparedStatement = connection.prepareStatement(insertQuery);

            Random random = new Random();

            for (int i = 1; i <= totalRecords; i++) {
                // 设置每个字段的值,根据表结构设置对应的数据生成逻辑
                preparedStatement.setLong(1, i);
                preparedStatement.setString(2, "CallSheet" + i);
                preparedStatement.setString(3, "Type" + (random.nextInt(5) + 1));
                // 设置其他字段的值...

                preparedStatement.addBatch();

                if (i % batchSize == 0) {
                    preparedStatement.executeBatch();
                    connection.commit();
                }
            }

            preparedStatement.executeBatch();
            connection.commit();

            preparedStatement.close();
            connection.close();

            System.out.println("测试数据生成完成!");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

请将上述示例中的数据库连接信息和插入逻辑根据您的数据库设置和表结构进行相应的修改。此程序将会在数据库中插入海量测试数据。

更方便的方法是在ChatGPT等大模型,输入下面提示语:

根据下面的表结构,生成100万的测试数据,给出详细的java实现代码或存储过程代码:【表结构】

亲测在New Bing是可以生成可以运行的代码。

作者 east
Flink, mysql 8月 15,2023

操作指南:使用 Flink CDC 同步 MySQL 分库分表

线事务处理(OLTP)系统中,为了解决单表数据量大的问题,通常采用分库分表的方法对单张大表进行拆分,以提高系统的吞吐量。但为了方便数据分析,在同步到数据仓库或数据湖时,一般需要将分库分表的数据合并成一张大表。本教程将向您展示如何使用 Flink CDC 为上述场景构建实时数据湖。本文中的示例将全部基于 Docker 并使用 Flink SQL。无需一行 Java/Scala 代码或安装 IDE。本指南的全部内容包含 docker-compose 文件。整个过程将通过从 MySQL 同步数据到 Iceberg 来展示,如下图所示。

步骤1:创建 docker-compose.yml 文件 创建一个 Docker Compose 文件(docker-compose.yml),内容如下:

Version: ‘2.1’

Services:

sql-client: user: flink

image: yuxialuo/flink-sql-client:1.13.2.v1

depends_on:

– jobmanager

– mysql

environment: FLINK_JOBMANAGER_HOST: jobmanager MYSQL_HOST: mysql volumes: – shared tmpfs:/tmp/iceberg jobmanager: user: flink image: flink:1.13.2-scala_2.11 ports: – “8081:8081” command: jobmanager environment: – | FLINK_PROPERTIES= jobmanager.rpc.address: jobmanager volumes: – shared tmpfs:/tmp/iceberg taskmanager: user: flink image: flink:1.13.2-scala_2.11 depends_on: – jobmanager command: taskmanager environment: – | FLINK_PROPERTIES= jobmanager.rpc.address: jobmanager taskmanager.numberOfTaskSlots: 2 volumes: – shared tmpfs:/tmp/iceberg mysql: image: debezium/example-mysql:1.1 ports: – “3306:3306” environment: – MYSQL_ROOT_PASSWORD=123456 – MYSQL_USER=mysql用户 – MYSQL_PASSWORD=mysqlpw volumes: – shared tmpfs driver-options: type: “tmpfs” device: “tmpfs”

这个 docker-compose 文件中的容器包括:

  • SQL-Client:Flink SQL Client,用于提交 SQL 查询和查看 SQL 执行结果
  • Flink Cluster:包含 Flink JobManager 和 Flink TaskManager,用于执行 Flink SQL
  • MySQL:作为数据源分库分表,存储用户表

注意:如果您想在自己的 Flink 环境中运行本指南,您需要下载下面列出的包并将其放在 Flink 目录的 lib 目录中,即 FLINK_HOME/lib/。

  • flink-sql-connector-mysql-cdc-2.4-SNAPSHOT.jar
  • flink-shaded-hadoop-2-uber-2.7.5-10.0.jar
  • iceberg-flink-1.13-runtime-0.13.0-SNAPSHOT.jar

步骤 2:准备 MySQL 数据库中的数据 进入 MySQL 容器,执行以下命令:

shell复制代码
docker-compose exec mysql mysql -uroot -p123456

然后在 MySQL 中创建数据、表,并填充数据:

sql复制代码
CREATE DATABASE db_1;
USE db_1;
CREATE TABLE user_1 (
  id INT NOT NULL PRIMARY KEY,
  name VARCHAR(255) NOT NULL DEFAULT 'flink',
  address VARCHAR(1024),
  phone VARCHAR(512),
  email VARCHAR(255)
);
INSERT INTO user_1 VALUES (110,"user_110","上海","123567891234","user_110@foo.com");

CREATE TABLE user_2 (
  id INT NOT NULL PRIMARY KEY,
  name VARCHAR(255) NOT NULL DEFAULT 'flink',
  address VARCHAR(1024),
  phone VARCHAR(512),
  email VARCHAR(255)
);
INSERT INTO user_2 VALUES (120,"user_120","上海","123567891234","user_120@foo.com");

CREATE DATABASE db_2;
USE db_2;
CREATE TABLE user_1 (
  id INT NOT NULL PRIMARY KEY,
  name VARCHAR(255) NOT NULL DEFAULT 'flink',
  address VARCHAR(1024),
  phone VARCHAR(512),
  email VARCHAR(255)
);
INSERT INTO user_1 VALUES (110,"user_110","上海","123567891234", NULL);

CREATE TABLE user_2 (
  id INT NOT NULL PRIMARY KEY,
  name VARCHAR(255) NOT NULL DEFAULT 'flink',
  address VARCHAR(1024),
  phone VARCHAR(512),
  email VARCHAR(255)
);
INSERT INTO user_2 VALUES (220,"user_220","上海","123567891234","user_220@foo.com");

步骤3:使用 Flink DDL 和 Flink SQL CLI 创建表 进入 Flink SQL CLI 容器,执行以下命令:

shell复制代码
docker-compose exec sql-client ./sql-client

在 Flink SQL CLI 中,执行以下命令:

sql复制代码
-- Flink SQL
SET execution.checkpointing.interval = 3s;

-- 创建源表 user_source 来捕获 MySQL 中所有数据库和表的数据并使用正则表达式来匹配这些数据库和表的配置项中使用的表。
-- 而且表还定义了一个元数据列来区分数据来自哪个数据库和表。
CREATE TABLE user_source(
  database_name STRING METADATA VIRTUAL,
  table_name STRING METADATA VIRTUAL,
  `id` DECIMAL(20, 0) NOT NULL,
  name STRING,
  address STRING,
  phone STRING,
  email STRING,
  PRIMARY KEY (`id`)
) WITH (
  'connector' = 'mysql-cdc',
  'hostname' = 'mysql',
  'port' = '3306',
  'username' = 'root',
  'password' = '123456',
  'database-name' = 'db_[0-9]+',
  'table-name' = 'user_[0-9]+'
);

关注公众号“大模型全栈程序员”回复“大数据面试”获取800页左右大数据面试宝典 ,回复“大数据”获取多本大数据电子书

作者 east
pgsql 4月 8,2023

pgsql运行出现 set – returning functions are not allowed in join conditions的错误

在 PostgreSQL 中,不允许在 JOIN 条件中使用返回 SET 类型的函数。这是因为,在执行 JOIN 操作时,需要根据 JOIN 条件将两个表中的行进行匹配和组合,而返回 SET 类型的函数可能会返回多行数据,无法直接用于 JOIN 条件。如果需要在 JOIN 条件中使用返回 SET 类型的函数,可以考虑改写查询语句,将函数的结果先存储到一个临时表中,然后再进行 JOIN 操作。或者,可以将该函数的结果提取出来,转化为数组或字符串等单一值类型,再在 JOIN 条件中使用。

以下是一个简单的示例代码,演示了如何避免在 JOIN 条件中使用返回 SET 类型的函数:

- 原始查询语句,会报错
SELECT *
FROM table1 AS t1
JOIN table2 AS t2 ON t1.id = ANY(my_function(t2.col));

-- 改写后的查询语句
WITH temp_table AS (
  SELECT id, my_function(col) AS set_col
  FROM table2
)
SELECT *
FROM table1 AS t1
JOIN temp_table AS tt ON t1.id = ANY(tt.set_col);

上述代码中,首先将返回 SET 类型的函数 my_function() 的结果存储到一个临时表 temp_table 中,并将其转化为数组形式。然后,在 JOIN 操作中使用 temp_table 表的列进行匹配。需要注意的是,实际应用中需要根据具体情况来修改查询语句,以适应不同的业务需求。

作者 east
pgsql 4月 7,2023

pgsql regexp_matches用法

PostgreSQL 中的 regexp_matches() 函数可以用于在一个字符串中匹配多个正则表达式,并返回所有匹配到的子字符串。其基本语法如下:regexp_matches(string, pattern [, flags])

其中:

  • string:要进行匹配的字符串。
  • pattern:用于匹配的正则表达式,可以包含一个或多个捕获组。
  • flags:可选参数,用于指定匹配模式,例如忽略大小写、支持换行、使用 POSIX 格式等。flags 的取值为一个字符组合,具体的取值和含义可以参考 PostgreSQL 文档。

函数的返回结果为一个二维数组,每个元素都是一个与正则表达式匹配的子字符串。以下是一个示例代码,演示了如何使用 regexp_matches() 函数从一个字符串中提取出所有的数字:

SELECT regexp_matches('abc123def456ghi', '\d+', 'g'); 

上述代码会返回一个二维数组,其中包含两个子数组,分别是匹配到的数字。也就是说,该函数返回的结果是:复制代码{{“123”}, {“456”}} 需要注意的是,PostgreSQL 还提供了很多其他的正则表达式函数,例如 regexp_replace()、regexp_split_to_array() 等等,这些函数都可以用于处理和操作字符串。

作者 east
mysql 4月 1,2023

Oracle 为 MySQL HeatWave 添加了机器学习特性

甲骨文正在为其数据分析云服务 MySQL HeatWave 添加新的机器学习功能。
MySQL HeatWave 在单个 MySQL 数据库中结合了 OLAP(在线分析处理)、OLTP(在线事务处理)、机器学习和 AI 驱动的自动化。
该公司在周四宣布更新时表示,新的机器学习功能将被添加到该服务的 AutoML 和 MySQL Autopilot 组件中。
虽然 AutoML 允许开发人员和数据分析师在 MySQL HeatWave 中构建、训练和部署机器学习模型,而无需转移到单独的机器学习服务,但 MySQL Autopilot 为 HeatWave 和 OLTP 提供了基于机器学习的自动化,例如自动配置、自动编码、自动查询计划、自动形状预测和自动数据放置等功能。
甲骨文表示,AutoML 添加的基于机器学习的新功能包括多变量时间序列预测、无监督异常检测和推荐系统,并补充说所有新功能都已普遍可用。
“多变量时间序列预测可以预测多个按时间排序的变量,其中每个变量都取决于其过去值和其他因变量的过去值。例如,考虑到用于发电的各种能源,它被用来建立预测模型来预测冬季的电力需求,”甲骨文研究高级副总裁 Nipun Agarwal 说。
与让受过时间序列分析或预测培训的统计学家为所需输出选择正确算法的常规做法相比,AutoML 的多变量时间序列预测会自动预处理数据以选择 ML 模型的最佳算法并自动调整模型,公司说。
“HeatWave AutoML 自动预测管道使用了一项专利技术,该技术由高级时间序列预处理、算法选择和超参数调整等阶段组成,”Agarwal 说,并补充说这种自动化可以帮助企业节省时间和精力,因为他们不需要有训练有素的统计人员。
根据 Constellation Research 首席分析师 Holger Muller 的说法,多变量时间序列预测功能是 Oracle 的 MySQL HeatWave 所独有的。
“时间序列预测,多变量或其他方式,目前不作为提供机器学习增强分析的单一数据库的一部分提供。例如,AWS 为时间序列提供了一个单独的数据库,”Muller 说。
除了多变量时间序列预测,Oracle 还在 MySQL HeatWave 中添加了基于机器学习的“无监督”异常检测。
该公司表示,与使用特定算法检测数据中特定异常的做法相比,AutoML 可以从未标记的数据集中检测不同类型的异常,并补充说,当企业用户不知道异常类型是什么时,该功能可以帮助他们数据集。
“HeatWave AutoML 生成的模型为所有类型的异常(本地、集群和全局)提供了高精度。该过程是完全自动化的,数据分析师无需手动确定要使用的算法、要选择的功能以及超参数的最佳值,”Agarwal 说。
此外,AutoML 添加了一个推荐引擎,它称之为推荐系统,支持 MySQL HeatWave 中算法选择、特征选择和超参数优化的自动化。
“使用 MySQL HeatWave,用户可以调用 ML_TRAIN 过程,该过程会自动训练模型,然后存储在 MODEL_CATALOG 中。要预测推荐,用户可以调用 ML_PREDICT_ROW 或 ML_PREDICT_TABLE,”Agarwal 说。
此外,甲骨文还在 HeatWave 中为业务用户添加了一个交互式控制台。
“新的交互式控制台允许业务分析师使用可视化界面构建、训练、运行和解释 ML 模型——无需使用 SQL 命令或任何编码,”Agarwal 说,并补充说该控制台使业务用户更容易探索条件场景他们的企业。
“添加交互式控制台符合企业试图让机器学习负责的做法。该控制台将帮助商业用户深入池中,因为他们希望发展成为‘公民数据科学家’,以避免陷入过多的困境,”dbInsight 首席分析师 Tony Baer 说。
该控制台最初可用于 AWS 上的 MySQL HeatWave。
甲骨文还表示,它将为 AWS 上的 HeatWave 添加对 Amazon S3 存储的支持,以降低成本并提高服务的可用性。
“当数据从 MySQL(InnoDB 存储引擎)加载到 HeatWave 时,会向构建在 S3 上的横向扩展数据管理层制作一份副本。当操作需要将数据重新加载到 HeatWave 时,例如在错误恢复期间,多个 HeatWave 节点可以并行访问数据,并且数据可以直接加载到 HeatWave 中,无需任何转换,”Agarwal 说。
添加到 MySQL HeatWave 的新功能包括 MySQL Autopilot 的两个新增功能——自动形状预测顾问与交互式控制台的集成和自动卸载。
“在交互式控制台中,数据库用户现在可以访问 MySQL Autopilot 自动形状预测顾问,该顾问会持续监控 OLTP 工作负载,以在任何给定时间推荐正确的计算形状并提供解释——让客户始终获得最佳性价比,”阿加瓦尔说。
据该公司称,自动卸载功能可以根据工作负载历史推荐要卸载的表。
“释放内存可以减少运行工作负载所需的集群大小并节省成本,”Agarwal 说,并补充说这两个功能都已普遍可用。
Oracle 正在提供更小形状的 HeatWave,以吸引数据量更小的客户。
该公司表示,与早期标准 HeatWave 节点的 512GB 大小相比,较小的形状将具有 32GB 的大小,能够以每月 16 美元的价格处理高达 50GB 的数据。
此外,该公司表示,其标准 512GB HeatWave Node 的数据处理能力已从 800GB 增加到 1TB。
“随着这一增长和其他查询性能的改进,HeatWave 的性价比优势进一步提高了 15%,”Agarwal 说。

作者 east
mysql 3月 27,2023

Google 的 Logica 语言解决了 SQL 的缺陷

谷歌推出了开源 Logica 编程语言,这是一种逻辑编程语言,旨在通过使用数学命题逻辑而非自然语言的语法来“解决 SQL 问题”。
作为谷歌 Yedalog 语言的后继者,Logica 于 4 月 12 日推出,是一种类似于 Datalogic 的逻辑语言。面向工程师、数据科学家和其他专家,它将代码编译为 SQL 并在基于云的 Google BiqQuery 数据仓库上运行,并提供对 PostgreSQL 和 SQLite 的实验性支持。但与 SQL 不同,Logica 更简洁并且支持可重用的抽象。它还支持模块和导入,可以从交互式 Python 笔记本中使用,并使测试查询变得简单自然,谷歌开发人员在一篇博客文章中写道。
Logica 通过使用数理逻辑语法而不是自然英语语言来解决 SQL 问题。谷歌列举了 SQL 的问题,例如从英文单词构建语句的冗长和对抽象的有限支持。 Logica 扩展了经典的逻辑编程语法,特别是聚合。它被宣传为一种用于数据操作的声明性语言。
Logica 开源项目背后的 Google 开发人员鼓励在以下场景中使用它:
Google 设立了一个教程来帮助开发者学习 Logica。要在 Google Cloud BigQuery 上运行逻辑程序,开发人员需要打开一个 Google Cloud 项目。项目建立后,开发者可以通过提供项目 ID 在 Colab 中运行 Logica 程序。要在本地运行 Logica,开发人员需要 Python 3。

作者 east
mongodb, redis 4月 8,2022

MongoDB vs. Redis——你应该使用哪个数据库?

比较 MongoDB 和 Redis 时的 5 个重要区别:

1、速度:Redis 比 MongoDB 快,因为它是一个内存数据库。
2、 RAM:Redis 使用比 MongoDB 更多的 RAM 来存储重要数据集。
3、 可扩展性:MongoDB 的可扩展性优于 Redis。
4、 存储:企业(主要)使用 Redis 进行键值存储。 MongoDB 将所有内容存储在文档中。
5、 评论:MongoDB 和 Redis 的评论普遍是正面的。 (两者在 G2 上都有 4.5/5 星。)

在当今的数字世界中,可靠的数据库具有多种功能。 所有类型的企业都需要在数据库中存储、管理和访问信息,以用于销售、库存、客户服务等。 一些世界上最大的品牌将 MongoDB 和 Redis 用于各种抽象数据结构。 但是哪一个更好呢? 有什么区别?

下面我们在几个因素上比较 MongoDB 和 Redis,以便您选择正确的一个。

MongoDB 与 Redis:特性和优势
MongoDB 与 Redis:技术细节
在比较特性之前,我们先来看看 MongoDB 和 Redis 的主要区别:

MongoDB 是一个 NoSQL 数据库。 MongoDB 于 2009 年发布,使用类似 JSON 的文档,允许用户存储无模式数据集。它将自己描述为“现代应用程序最流行的数据库”。有关 Integrate.io 的本机 MongoDB 连接器的更多信息,请访问我们的集成页面。
Redis 是一种内存数据结构存储,可兼作数据库。 Redis 同样于 2009 年发布,支持列表、地图、位图、流、字符串和空间索引等各种数据结构。
虽然 MongoDB 和 Redis 有很多不同,但它们有一些共同点:

两者都有开源许可证。
两者都启用二级索引。
两个数据库最终都成为计算密集型的。
MongoDB vs. Redis:数据库结构
MongoDB 和 Redis 具有不同的数据库结构设置,MongoDB 的性能类似于关系数据库。 (它使用表达性查询语言。)不过,关键的区别在于 MongoDB 是无模式的,因此用户不必创建文档结构。这意味着该平台是两者中更容易使用的。

另一方面,Redis 使用键值存储,用最简单的术语来说,将数据分配给键和关联值。这意味着设置与 MongoDB 完全不同,MongoDB 使用传统上与关系数据库相关的行和列。键值存储使一些用户受益,但 Redis 一开始对一些人来说可能看起来很陌生。正如我们之前提到的,Redis 使用其他数据结构——位图、集合、字符串,等等——尽管它优先考虑键值存储。

MongoDB 与 Redis:可扩展性
MongoDB 和 Redis 都在可扩展性方面得分,这使得它们对于任何成长中的业务都值得添加。不过还是有区别的:

MongoDB 是用 C++ 编写的,可用于 Windows、OS X、Linux 和 Solaris。
Redis 是用 C 编写的,可用于 Windows、OS X、Linux 和 BSD。
MongoDB 和 Redis 都支持广泛的编程语言,包括 C、C~、C++、Java、Python 和 Scala。

在考虑扩展数据管理时,用户应该考虑到所有这些。

MongoDB 与 Redis:性能
Redis 比 MongoDB 快,因为它是一个内存数据库。这使它成为快速构建复杂数据结构的绝佳选择。然而,MongoDB 适合大多数需要可靠数据库的中型企业。它相对简单易用,而且正如我们前面提到的,它非常可扩展。

速度带来了一些缺点。 Redis,也许并不奇怪,比 MongoDB 使用更多的 RAM,这对于非平凡的数据集是显而易见的。

MongoDB vs. Redis:流行度
这两个开源数据库都有一个忠实的用户社区:

MongoDB 定期在其社区页面上举办网络研讨会和其他活动。
Redis 拥有一个蓬勃发展的社区,用户在这里讨论新功能,甚至亲自见面。
许多著名公司使用这些工具:

Uber、Lyft 和 Stack 使用 MongoDB。
Twitter、GitHub 和微博都使用 Redis。

集成您的数据仓库

MongoDB 与 Redis:定价
MongoDB 和 Redis 都有开源许可证,可以免费使用。但是,因此这两个平台都存在局限性。尽管 MongoDB 和 Redis 允许用户存储和管理各种数据,但用户需要了解编程语言。

在数据管理方面,一些企业将受益于支付不需要任何代码的 ETL 平台。这使得无需学习查询语言即可轻松简化数据处理和优化工作流程。

MongoDB 与 Redis:评论
人们如何看待 MongoDB 和 Redis?

MongoDB 评论
根据 356 条客户评论(截至 2020 年 9 月),MongoDB 在流行的技术评论网站 G2 上的平均评分为 4.5/5 星。

一位评论员是一家大公司的工程师,他说:

“MongoDB 可以非常正确、轻松、实时地读取数据。在那里编写查询也非常容易。通过 API 链接到各种资源也非常容易。该应用程序还提供了出色的结果。”

大多数 MongoDB 评论都是正面的。然而,对数据库的批评包括:

用户需要了解一门编程语言。
很难识别不同的特征。
文档的大小限制。
一位担任数据分析师的审稿人指出:

“我很伤心,因为它需要大量内存,因为它存储每个值对的键名,因此意味着存在高数据冗余。它还限制了嵌套,也不支持连接。”

Redis 评论
根据 82 条用户评论(截至 2020 年 9 月),Redis 在 G2 上的平均评分也为 4.55。

一位评论员是一家大公司的数据架构师,他说:

“Redis 数据库非常易于安装和使用。配置也适合单个文件。性能非常好,此工具可让您轻松扩展应用程序。”

这位审稿人将 Redis 用于各种目的,例如“缓存文件、存储临时数据、排队、发布/子系统”等等。

对 Redis 的批评包括:

缺乏用户支持文档。
脚本语言。
内存限制。


作者 east
数据库 4月 6,2022

MongoDB vs PostgreSQL:数据库结构的详细比较

任何公司功能中最重要的部分之一是安全数据库。 随着网络钓鱼攻击、恶意软件和其他威胁的增加,您必须做出正确的选择,以确保您的数据安全并有效处理数据。 然而,在当今市场上种类繁多的数据库解决方案中进行选择可能非常困难。 两个常用的选项是 Mongodb 和 Postgresql。

关于 MongoDB 与 PostgreSQL,您需要了解什么? 本文将带您比较每个的主要特性、功能和性能。

什么是 MongoDB?
MongoDB 是一个无模式文档数据库,提供免费和付费计划。作为文档数据库,MongoDB 的结构和语法与传统的 RDMS(关系数据库管理系统)不同。它是一个 NoSQL(不仅仅是 SQL)数据库。

NoSQL 数据库通常本质上更简单,因此对于具有任何编程经验的人来说,MongoDB 相对容易学习。文档数据库将数据处理为 JSON 类型的文档。这些数据是半结构化的,而不是完全结构化的。这意味着它可以比许多其他解决方案更快地处理大量数据。这也意味着用户可以在处理的所有不同阶段以及各种格式和结构中搜索和处理数据,从而使数据库比传统的关系数据库具有更高的灵活性。用户可以根据需要访问数据并对模式进行更改或更新,这与 SQL 数据库模型不同,在 SQL 数据库模型中,用户只能在数据经过处理和正确格式化后才能访问数据。

MongoDB 使用 BSON(二进制 JSON)。 BSON 允许某些不与常规 JSON 一起使用的数据类型,例如 long、floating-point 和 date。 MongoDB 还提供了一种替代 SQL 的查询语言,称为 MQL。 MQL 带来了许多与 SQL 相同的功能以及对各种编程语言的额外支持。该数据库具有分布式架构,这意味着组件在多个平台上相互协作。这也意味着 MongoDB 具有几乎无限的可扩展性,因为它可以根据需要跨多个平台进行扩展。这是将 MongoDB 与关系数据库区分开来的众多因素之一,因为关系数据库只能垂直扩展并且价格昂贵,因为在某些时候它们需要多个服务器才能扩展数据库的多个副本。 MongoDB 可以水平扩展。

MongoDB 是用 C、C++ 和 JS 编写的。

MongoDB 通过 TLS 和 SSL(传输层安全和安全套接字层)提供客户端、字段级加密。 TLS 和 SSL 都是使 HTTP(超文本传输​​协议)变成 HTTPS(安全超文本传输​​协议)的互联网加密协议。事实上,TLS 只是一种升级的 SSL,旨在减少安全漏洞。用户因此可以加密所有 MongoDB 网络流量。此外,MongoDB 有各种保护措施来确保正确验证用户身份。

MongoDB 提供社区支持,并在支持工程师的监督下提供有偿的全面培训和升级。

MongoDB 的任务完成速度非常快,特别是由于数据只是半结构化的。根据各种评论,即使在定期处理大量数据时,它也是市场上速度更快的解决方案之一。这使其非常适合需要实时或接近实时数据的情况,从而使公司能够立即全面了解其业务。

MongoDB 可以托管在 Google Cloud Platform、Amazon Web Services (AWS) 和 Microsoft Azure 等云平台上。

MongoDB 的常见用例包括客户分析、内容管理、业务交易和产品数据。该数据库还非常适合需要扩展到数百万用户的移动解决方案,这要归功于它的扩展能力。另一个主要用例是提供数据即服务的平台。 MongoDB 可以实时更新数据,允许用户在新信息进入时查看它。最后,MongoDB 提供的 IDP(智能数据平台)将数据库与其他互补技术相结合,成为一个完整的 IoT(物联网)支持物联网应用的平台。

什么是 PostgreSQL?
PostgreSQL 是一个 100% 免费和开源的 ORD(对象关系数据库)。数据库不是像文档那样存储数据,而是将其存储为结构化对象。它遵循 SQL 数据库的传统语法和模式。 Schema 实际上是一个模板或结构,您可以使用一组词汇将其应用于数据库。模式包含各种模式对象,包括任何表、列、键等。您必须在将数据加载到此类数据库之前对其进行结构化。虽然这往​​往需要更多时间,但它也可以将数据转换为更易于管理和可读的格式。

PostgreSQL 具有单体架构,这意味着组件是完全统一的。这也意味着数据库只能与运行它的机器一样扩展。它是用 C 语言编写的。代码是开源的,可供开发人员访问。 PostgreSQL 提供社区支持,并且仅通过某些其他公司提供额外的付费支持选项。

Postgres 包括基本文件保护、通过 IP 地址限制客户端连接的能力,以及与旨在使其更加安全的各种其他外部包的兼容性。

PostgreSQL 的用例包括银行系统、风险评估、多应用程序数据存储库、BI(商业智能)、制造和支持各种业务应用程序。它是事务性工作流程的理想选择。此外,PostgreSQL 具有故障保险和冗余,使其存储特别可靠。这意味着它非常适合医疗保健和制造业等重要行业。

两个数据库都使用不同的语法和术语来执行许多相同的任务。 PostgreSQL 使用表的地方,MongoDB 使用集合。 PostgreSQL 使用行来记录数据,MongoDB 使用文档等。它们还具有许多将它们彼此区分开来的特性。

MongoDB 与 PostgreSQL 的主要特性
MongoDB 具有 ACID 合规性的潜力,而 Postgres 具有内置的 ACID 合规性。 ACID(原子性、一致性、隔离性、持久性)是致力于数据有效性的原则或组件,尤其是在用于事务工作流的数据库中。


MongoDB 使用集合的目的与 Postgres 使用表的目的相同。这些集合包括用于设置验证规则和设置最大大小的选项。 Postgres 用一种非常特定的语言描述表,并以数据库或 ETL 工具可以处理它的方式构造数据。


两者之间术语和语法差异的另一个示例是 MongoDB 使用文档来获取数据,而 Postgres 使用行来实现相同目的。


虽然 MongoDB 不支持 FOREIGN KEY 约束,但 PostgreSQL 支持。外键可以是一个列或一组列,您可以使用它们同时在来自多个表的数据中创建链接。由于这些约束不允许破坏从一个表到另一个表的链接的任何操作,并且可以阻止将无效数据插入外键列,因此这可能是某些用户的必要功能。


MongoDB 聚合管道由多个阶段组成,用于转换数据。 Postgres 使用 GROUP_BY 运行查询,而 MongoDB 使用聚合管道。


MongoDB 使用冗余副本集,Postgres 执行同步或 2-safe 复制来维护数据集。您可以根据需要使用副本集来记录和“重播”过程。同步复制涉及同时更新多个存储库或系统。由于 PostgreSQL 数据库同时更新两条记录,以同样的方式,您可以减少错误,从而使用户拥有完整准确的备份。


像 Postgres 这样的 SQL 数据库使用连接将来自多个表的数据组合到一个表中。您可以使用四种不同类型的连接:全连接、左连接、右连接和内连接。假设您有两个表要连接一些数据,但不是全部,您将使用 left、right 或 inner 将两个表合并到您的第一个表或第二个表中,或者将两个表的一部分合并到第三张桌子。如果要将所有数据同时连接到一个表中,则可以使用完全连接。 MongoDB 使用索引,它只是连接的一个组成部分。该数据库不是为执行常规连接而设计的。索引是一种数据结构,可以以易于阅读的形式存储非常少量的数据。它们通过使数据更简单从而更易于扫描来帮助您更高效地解决查询。

MongoDB PostgreSQL
Schema-free  SQL-based but supports various NoSQL features
Document database Relational database
Uses BSON Uses SQL
Distributed architecture Monolithic architecture
Potential for ACID compliance ACID-compliant
Uses collections Uses tables
Uses documents to obtain data Uses rows to obtain data
Does not support foreign key constraints Supports foreign key constraints
Uses the aggregation pipeline for running queries Uses GROUP_BY
Redundant replica sets 2-safe replication
Uses indexes Uses joins

综上所述,MongoDB 和 PostgreSQL 的主要区别在于它们的系统、架构和语法:MongoDB 是文档数据库,而 Postgres 是关系数据库管理系统; MongoDB 是分布式架构,而 PostgreSQL 是单体架构; Postgres 使用 SQL,而 MongoDB 使用 BSON。

对于已经初步了解 JavaScript 的人来说,MongoDB 的学习曲线更短,而那些在 SQL 数据库方面有长期经验的人可能会发现更容易适应 Postgres。两者都作为各种行业的综合数据库解决方案越来越受欢迎。然而,公司在处理来自任一数据库的数据时遇到的最大问题之一是所涉及的时间和复杂性。

ETL(提取、传输和加载)数据到 MongoDB 或 PostgreSQL 数据库中通常涉及大量编码和复杂、耗时的过程。此外,由于 MongoDB 具有不寻常的语法和 NoSQL 支持,许多 ETL 提供商可能没有优化他们的解决方案来应对其特定挑战。

作者 east
mysql, 数据库 4月 6,2022

Oracle 与 MySQL:语法和使用详细比较

数据库管理系统允许组织对可用数据进行分类和结构化,以创建一个流畅、更有条理的工作环境。 它们是企业的基础,因为它们提供了管理大量和各种数据类型的有效方法。 因此,公司可以更快地做出明智的决定。 选择正确的数据库管理系统会有所作为。 虽然有些系统具有符合您的业务目标的特定功能,但其他系统根本没有。 如果您要决定下一个数据库管理系统,是使用 MySQL 还是 Oracle,以下比较将为您提供做出正确决定所需的信息。

Oracle 和 MySQL 之间的主要区别
虽然 MySQL 和 Oracle 都提供了与关系模型相同的体系结构,并提供了许多标准功能,例如专有软件许可证,但这两种工具之间存在一些关键差异。

MySQL 提供 GPL 软件许可,而 Oracle 没有。
Oracle 与 Linux、UNIX、Windows、Mac OS X 和 z/OS 兼容。 MySQL 与所有这些以及 Symbian、BSD 和 AmigaOS 兼容。
MySQL 仅支持全文和哈希索引。 Oracle 使用的索引不止这些,包括位图、基于函数、分区等。
Oracle 支持分布式数据库,而 MySQL 不支持
Oracle 更适合企业部署,而 MySQL 更适合中小型规模。
MySQL 是免费的,而 Oracle 需要许可费。

甲骨文概述
Oracle 是一个关系数据库管理系统,旨在实现自动驱动、自我保护、自我修复,并消除容易出错的手动数据库管理。它可以在各种操作系统上运行,并允许安全存储和快速检索数据。 Oracle 是第一个为商业目的而开发的使用查询语言管理数据的数据库工具,于 1980 年发布,具有基本的 SQL 功能。

Oracle 数据库特性
它是可扩展的、可移植的、分布式的和可编程的。
它允许在不知道数据的物理存储的情况下与数据库进行交互。
Oracle 使跨不同平台的应用程序与 Oracle 数据库之间的通信顺畅。
Oracle数据库可以运行在Windows、Linux、Mac等多种操作系统上。
它使 ACID 属性能够维护数据的完整性和可靠性。
它可以快速管理大量数据。
它有一个恢复管理器工具,可提供冷、热和增量数据库备份和恢复。
Oracle 的其他一些好处包括:

能够运行大型 ILTB 和 VLDB。
功能非常丰富。
可靠的。
提供闪回技术。

MySQL概述
MySQL 是一种流行的数据库管理系统,专为处理关系数据库而设计。它是 Oracle 公司支持的可扩展的开源工具。与 Oracle 数据库相比,MySQL 的处理速度一样快,并且它的界面经常在评论网站上被引用为更直观和更易于使用。

瑞典公司 MySQL AB 开发并支持 MySQL。 2008 年 1 月,Sun Microsystems 以 10 亿美元收购了 MySQL AB。 2009 年 4 月,甲骨文公司同意收购 Sun Microsystems,当时是 MySQL 版权和商标的所有者。许多大大小小的公司都使用 MySQL。 MySQL 适用于许多操作系统,如 Windows、Linux、macOS 等,使用 C、C++ 和 Java 语言。

MySQL 数据库功能
它是免费和开源的。
MySQL 是一个易于使用的关系数据库管理系统。
它遵循客户端/服务器架构。
它提供了卓越的性能、高度的灵活性和更高的生产力。
它是可扩展的。
令人难以置信的安全性
它使事务能够回滚、提交和崩溃恢复。

Comparison Basis MySQL Oracle
发行年份 1995 1980
价格 It is free and open-source. It is licensed under the GNU. It is licensed for commercial purposes The express edition is free for students.
操作系统支持 WindowsMac OS XLinuxUNIXz/OSBSDSymbianAmigaOS WindowsMac OS XLinuxUNIXz/OS
弹性 Better for small and big businesses Better for large-scale deployments
Data Partitioning Not Supported Supported
安全性 Username, password, and host required to access the database Username, password, and profile validation required to access the database
System Type Static system. Static and dynamic systems.
Null Value Supported Not Supported
Character Support CHAR and VARCHAR. CHAR, VARCHAR2, NCHAR, and NVARCHAR2.
语言支持 SQL SQL and PL/SQL

如 Oracle 文档中所述,Oracle 与 MySQL 语法的一些显着差异如下:

MySQL Data Type Oracle Data Type
BIGINT NUMBER(19, 0)
BIT RAW
BLOB BLOB, RAW
CHAR CHAR
DATE DATE
DATETIME DATE
DECIMAL FLOAT (24)
DOUBLE FLOAT (24)
DOUBLE PRECISION FLOAT (24)
ENUM VARCHAR2
FLOAT FLOAT
INT NUMBER(10, 0)
INTEGER NUMBER(10, 0)
LONGBLOB BLOB, RAW
LONGTEXT CLOB, RAW
MEDIUMBLOB BLOB, RAW
MEDIUMINT NUMBER(7, 0)
MEDIUMTEXT CLOB, RAW
NUMERIC NUMBER
REAL FLOAT (24)
SET VARCHAR2
SMALLINT NUMBER(5, 0)
TEXT VARCHAR2, CLOB
TIME DATE
TIMESTAMP DATE
TINYBLOB RAW
TINYINT NUMBER(3, 0)
TINYTEXT VARCHAR2
VARCHAR VARCHAR2, CLOB
YEAR NUMBER

Oracle 与 MySQL:如何选择
在 MySQL 与 Oracle 之间进行选择时,必须了解每种工具的优势和劣势,因为它与您期望的业务成果相关。

Oracle 何时是更好的选择?
Oracle 是财富 100 强公司和大型企业的普遍选择,因为它专为大型业务应用程序和大型数据仓库而设计。

那些寻找最广泛的特性列表的人会选择 Oracle,因为它包含各种特性,并且最大限度地减少了对第三方软件的需求。

什么时候 MySQL 是更好的选择?
MySQL 为较小规模的项目提供了更好的选择。 通过将数据库驱动的应用程序迁移到 MySQL,或者将 MySQL 用于新的开发项目,企业正在实现成本节约,这些成本节省了很多倍,达到了数十万美元。 对于初创公司和小型公司,MySQL 更适合。

作者 east
Hive, 数据库 4月 4,2022

Hive对比SQL:哪个更适合数据分析

Hive 和 SQL 之间的主要区别:

架构:Hive 是一个用于数据分析的数据仓库项目; SQL 是一种编程语言。 (但是,Hive 通过称为 HiveQL 的编程语言执行数据分析,类似于 SQL。)


设置:Hive 是一个基于开源软件程序 Hadoop 的数据仓库。
数据分析:Hive 比 SQL 更有效地处理复杂数据,适合不太复杂的数据集。


价格:Hive 价格从每位用户每月 12 美元起。 SQL 是开源和免费的。


评论:Hive 在 G2 网站上的客户评论评分为 4.2/5。因为 SQL 是一种编程语言而不是“产品”,所以它在 G2 上没有评论。


大数据需要强大的工具。成功的组织查询、管理和分析来自数百个数据源的数千个数据集。这就是 Hive 和 SQL 等工具的用武之地。尽管非常不同,但查询和编程大数据都是如此。

但是哪种工具适合您的组织?在这篇评论中,我们在功能、价格、支持、用户评分等方面比较了 Hive 与 SQL。

什么是Hive?
Apache Hive 是一个用于数据查询和分析的数据仓库项目。 Hive 建立在 Apache Hadoop(一个用于处理大数据的开源程序)之上,通过查询语言 HiveQL 执行数据分析,它允许用户构建数据并生成各种有用的分析。

Hive 由 Facebook 开发,使希望从电子表格、网络日志、CRM 系统等中查询和汇总数据的用户受益。 它在 Hadoop 分布式文件系统 (HDFS) 中查询数据,并将该系统用于自己的存储。 它还运行 MapReduce 作业。

什么是 SQL?
结构化查询语言 (SQL) 是一种特定于领域的编程语言,用于管理数据和/或处理数据流。它主要管理数据并处理关系数据库管理系统中保存的实时数据。在这篇评论的上下文中,SQL 就像 HiveQL。

SQL 由 Oracle 开发,是一种用于分析查询的声明性语言。它比 Hive(和 HiveQL)更新得多。 SQL 可以追溯到 45 年前,并且在许多 IT 系统中已经无处不在。

有关我们的原生 SQL 连接器的更多信息,请访问我们的集成页面。

Hive 和 SQL 的区别
Hive 在 HDFS 中写入和查询数据。 SQL 需要多次读取和写入。
Hive 更适合分析复杂的数据集。 SQL 更适合快速分析不太复杂的数据集。
SQL 支持联机事务处理 (OLTP)。 Hive 不支持 OLTP。
Hive 查询可能具有高延迟,因为 Hive 通过 Hadoop 运行批处理。这意味着某些查询要等待一个小时(或更长时间)。更新 Hive 上的数据也可能需要很长时间。

支持和培训
HIVE
一个在线社区(Apache 软件基金会)
资源
邮件列表
语言手册


SQL
虽然没有提供官方培训,但有各种 SQL 第三方培训模块/支持社区。

价钱
HIVE
计划从每位用户每月 12 美元起。
有 14 天的免费试用期。
SQL
作为一个开源平台,SQL 是 100% 免费的。 但是,SQL 定价并未考虑您可能遇到的任何设置或维护成本。

结论
Hive 和 SQL 是处理(和驯服!)大数据的两种工具。 尽管这些工具有相似之处,但它们的差异足以保证进行比较。 我们认为 Hive 更适合分析复杂的数据集,而 SQL 更适用于不太复杂的数据集,并且在执行这些任务时速度更快。 另外,它是开源和免费的。 最终,适合您的工具取决于您如何分析组织中的大数据。

作者 east
数据库 3月 26,2022

NoSQL数据库面面观

NoSQL 数据库是否比遵循关系模型的数据库更好,反之亦然?这是一个不容易回答的问题。事实上,它可能根本没有答案。这取决于数据库将存储、组织和操作什么样的数据。一旦知道了这一点,选择就会变得更加清晰。 NoSQL,也被称为“不仅仅是 SQL”,近年来越来越流行。大数据时代已经来临,捕获大量非结构化数据的需求是许多组织非常感兴趣的话题。利用大量数据,将其归结为可理解的模式,并利用这些知识做出合理的业务决策,这是分析的核心。无论规模大小,组织都意识到这是一个如果他们希望成功竞争就不能忽视的领域。然而,处理这些庞大的数据集可能是一项艰巨的挑战,而这正是 NoSQL 最擅长的。 NoSQL 的开发是为了满足数据量和用户量的增长。在过去,几千个并发用户似乎过多。今天,一些在线应用程序可能会在很短的时间内拥有数十万甚至数百万的用户。从购物偏好到制造产出的微小细节,这些海量数据都被捕获、存储和分析。不幸的是,这些活动超出了传统关系数据库的能力。 NoSQL 数据库可以通过提供水平可扩展性、高性能处理和有效处理非结构化数据的能力来应对这种新的“大数据环境”。

NoSQL 的特点

NoSQL 数据库的存储和检索方法与传统的关系数据库管理系统 (RDBMS) 相比存在显着差异。 NoSQL 和关系模型之间最大的区别之一是,与 RDBMS 相比,许多 NoSQL 数据库没有严格的结构。这是有效处理非结构化数据的关键。

可扩展性

在处理大量数据的应用程序中,快速、弹性地扩展系统的需求变得势在必行。与关系型 SQL 相比,NoSQL 在可扩展性方面表现出色。过去,当数据库负载增加并且系统需要扩展时,RDBMS 的主要选择是扩展。这通常需要升级到更大、更昂贵的服务器。今天,NoSQL 允许您向外扩展。这涉及向集群添加额外的服务器,使其能够承担额外的数据库负载。可以使用更便宜的商品服务器,过程几乎是透明的,部署时间最短,如果做得好,应该不会出现应用程序停机。

模式

关系模型使用的刚性模式是由构成数据库的基础表之间的关系和约束定义的。这些是一组非常严格的规则,用于管理传统 RDBMS 的许多操作。然而,NoSQL 数据库在“无模式”模型上运行。它不受关系模型强制执行的严格规则的约束。这使得 NoSQL 数据库更加灵活,可以轻松处理结构化、半结构化和非结构化数据。

成本

平均 RDBMS 的硬件要求可能很昂贵。这种类型的数据库通常需要昂贵的专有服务器才能运行。对于许多公司而言,软件许可费用也可能过高。由于 NoSQL 旨在运行在廉价商品服务器集群上,因此其成本效益方面对组织非常有吸引力。另一个优势是相当多的 NoSQL 风格是开源的,有助于进一步降低成本。最后,许多商业 RDBMS 安装需要训练有素的数据库管理员。这些专业人士并不便宜。 NoSQL 数据库更简单的数据模型大大减少了管理需求。

性能特点和优势

除了 NoSQL 数据库可以快速轻松地捕获和处理大量数据之外,它的操作环境还有其他几个关键的性能优势。 NoSQL 数据库是在分布式架构上实现的。这意味着不存在单点故障。这些高可用性集群经过调整,以便如果集群中的一个节点出现故障,系统中内置了足够的冗余,使其能够连续运行。 NoSQL 数据库运行的分布式架构也使得实现容错和灾难恢复等功能成为可能。上面突出显示的 NoSQL 的特性是使其成为快速有效地处理大数据需求的好选择的原因。这些功能的设计考虑了大数据的三个 V:数量、速度和多样性。这三个词优雅地代表了组织的大量数据、非凡的速度和多样化的数据。

NoSQL 限制

考虑到它的实用性,NoSQL 数据库仍然存在一些不足。在数据冗余和准确性方面,它没有架构这一事实可能会导致问题。但是等一下。我们不是说在处理非结构化数据时需要一个无模式数据库吗?是的,但是在其他情况下,没有架构可能会产生不利影响。由于数据库没有像 RDBMS 那样对数据的收集、组织和存储执行严格的规则,因此它为丢失数据完整性敞开了大门。 NoSQL 供应商声称已经建立了机制来解决这个问题,但这些解决方案本质上是程序化的,而不是内置的。现代 RDBMS 是一个成熟的、经过时间考验的系统,背后有数十年的严格操作使用。 NoSQL 数据库仍然需要在这方面做一些追赶。

NoSQL 与关系型

正如我们所见,在某些情况下 NoSQL 数据库是必不可少的。但是,其他数据需求需要 RDBMS 的成熟度。这并不总是一个明确的情况,许多组织发现他们不能没有两个模型并存。

结论

关系数据库的消亡可能为时过早。 NoSQL 数据库已经在数据库世界中留下了自己的印记。然而,越来越明显的是,大多数组织都离不开这两种模式。例如,列式数据库在查询 TB 级数据时非常快,但即使在查询边缘数据集时,查询也需要几秒钟才能返回。在这种情况下,RDBMS 在速度和效率上是最好的。在处理商业智能分析的聚合数据时,使用 MySQL 或 PostgreSQL 进行交易、电子商务服务的组织也可能需要 NoSQL。 Amazon Redshift、Vertica 和 Hadoop 等解决方案和框架的普及和需求证实了这一点。无论您怎么看,具有 NoSQL 和关系模型的混合数据中心可能会在未来一段时间内出现。

作者 east
数据仓库, 数据库 3月 25,2022

数据工程最糟糕的部分是什么

在数据工程团队中,列表很长,取决于您的个人角色。但我的一般选择是“最终数据科学家和数据分析师糟糕的 SQL 语句”。

可能不是一个明显的答案,所以让我解释一下。

如果您正在使用数据仓库,让我们从数据工程团队的三个主要工作领域的角度来看这个问题:

构建 ETL 管道 → 将数据导入您的仓库

构建转换→加入/转换不同的数据集

公开数据以供下游使用 → 报告、分析、ML/AI

数据工程师还需要对元数据进行分类和组织,并定义从仓库写入和读取数据的流程。在某种程度上,他们是数据仓库的图书馆员。

然后目标是尽可能抽象和自动化。通过自动化,数据工程师可以将他们稀缺的时间用于构建与维护/修复。

您还通过向您提供的数据添加 SLA 来向业务做出承诺。 “报告将在太平洋标准时间早上 6 点之前完成”或“我们的分析环境仅比我们的生产环境晚 15 分钟”。

瞧,您已经完成了以上所有工作,将其投入生产,稍作调整,一切正常。你可以继续做别的事情。嗯,不。

变革的驱动力

事情不是一成不变的。如果您正在为一家不断发展的企业工作,那么您将不得不应对三个挑战:

数据量在 5 年内增长约 10 倍,同时出现了越来越多的新型数据源

模型的数量正在增长。随着您将更多数据引入您的仓库,您可以以无限新的方式组合这些数据。你会听到术语“DAG”(有向无环图)。

用户和工具的数量正在增长。随着业务的增长,需要/想要访问数据的人数也在增加。他们将希望使用他们选择的工具访问这些数据。

数据工程的挑战

现在你是负责这个堆栈的数据工程师。您的公司将雇用更多的数据工程师来保持运转。例如,Netflix 每个数据源都有一名数据工程师,他们的全部工作就是保持该数据源的盘子旋转。

但并非每家公司都有 Netflix 的预算。人数有上限。但是,贵公司招聘的数据科学家和分析师的数量似乎没有限制。更多的关注数据是“数据驱动的”。

因此,“数据构建者”(数据工程师)和“数据消费者”(数据分析师、科学家、机器学习应用程序等)之间的比例猛增。

我看到(数据构建者)与(数据消费者)的比率介于 1:20 到 1:40 之间。一名数据工程师必须支持 20-40 个下游用户。

这就是问题开始的地方。回到最初的三个工作领域,将会发生以下情况:

ETL 管道运行很长时间并产生错误和问题。不过,您可能只能在运行后发现,现在您必须弄清楚是什么损坏了。这是一个巨大的干扰。

现有的模型可能无法提供企业想要的答案。分析师想要快速行动,因此他们绕过您并开始添加新模型,甚至直接在您的仓库中查询原始数据。如果基础表发生变化,这会导致模型膨胀和损坏。

您的最终用户可能正在使用为他们生成 SQL 的工具。或者他们编写自己的 SQL 语句。这两种方法都可能导致糟糕的 SQL 语法使整个仓库紧张,每个人的查询速度都很慢。

然后用户向数据工程师提交支持票(“我的查询很慢”,或者“我的查询没有完成或完成”)。你会被支持请求淹没。

我们当然是在戏剧化,但从方向上讲,这是工作中最糟糕的三个部分。让我们称之为“保持盘子旋转”。

数据工程中最糟糕的部分

我书中最糟糕的一点是最后一点——处理糟糕的 SQL。

那是因为管道和模型是您可以控制的。约定、工具、监控、警报、访问权限等——有一种方法可以在事物周围设置护栏。

但是控制最终用户和他们的 SQL 是不可能的。例如,我见过没有 WHERE 子句的“SELECT *”查询,它连接两个表,每个表有 20 亿行。输出量如此之大,以至于它会填满并取下仓库。 “谁写了那个查询??”。

不太引人注目的结果包括编写查询,例如10 分钟的执行时间,一个小的更改可能会导致 1 分钟的执行时间。这听起来可能没什么大不了的(“我会同时去喝杯咖啡”),但这是生产力的巨大损失。对于数据科学,快速迭代和测试模型就是一切。

是的,您可以设置规则来终止查询,但所做的只是增加分析师文件的支持票数,因为查询没有完成。

对于数据工程师来说,这些查询是谁编写的也不是很明显。分析师使用的工具掩盖了他们背后的用户。 Tableau、Looker 或 Mode Analytics 等仪表板工具在您的仓库中显示为一个用户。

但在他们身后,他们可能有 100-200 人在编写查询。因此,您使用“Looker”作为用户,但您不知道是“Jack”、“Anne”还是“Joe”编写了查询。因此,要找出发生了什么以及谁编写了哪个查询,需要进行大量的挖掘工作。

概括

所以你去,上面是长版本。答案的简短版本是“最终用户的 SQL 语句不佳”。

这是一个问题,原因有以下三个:

您无法控制分析师编写的 SQL 语法。您可能只有在查询运行并造成损坏后才能发现。

分析师用来编写查询的工具掩盖了他们背后的用户。在拥有数百名用户的情况下,找到编写查询的用户就像大海捞针一样。

您不能只是关闭分析师或终止他们的查询——这将导致支持票证的增加以及数据工程和数据消费者之间的摩擦。

随着数据生产者与数据消费者的比例越来越大,问题只会越来越大。您必须支持的最终用户越多,您必须处理的投诉和罚单就越多,这是一个巨大的挫败感和时间浪费。

当然,这个问题的答案是让分析师能够编写更好的 SQL,并帮助数据工程师在这方面与分析师协作。

作者 east

上一 1 2 3 下一个

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?
  • C++ 中避免悬挂引用的企业策略有哪些?
  • 嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
  • C++如何在插件式架构中使用反射实现模块隔离?
  • C++如何追踪内存泄漏(valgrind/ASan等)并定位到业务代码?
  • C++大型系统中如何组织头文件和依赖树?

文章归档

  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (43)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (4)
  • 大数据开发 (488)
    • CDH (6)
    • datax (4)
    • doris (30)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (40)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (99)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (70)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (6)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.