Синхронизация данных в реальном времени из MySQL в ClickHouse — MaterializeMySQL + Materialized View
Синхронизация данных в реальном времени из MySQL в ClickHouse — MaterializeMySQL + Materialized View

В этой демонстрации используется механизм базы данных MaterializeMySQL ClickHouse и материализованные представления для синхронизации данных в таблице библиотеки MySQL с таблицей библиотеки ClickHouse в реальном времени. Соответствующие версии программного обеспечения следующие:

  • MySQL:8.0.16
  • ClickHouse:24.1.8

Преимущество этого решения в том, что оно просто в эксплуатации и практически не требует дополнительной настройки.

1. Общая структура

Язык кода:txt
копировать
    Общая структура показана на рисунке ниже.
Язык кода:txt
копировать
    ClickHouse Состоит из четырех экземпляров с двумя шардами и двух реплик без шардов. Используются голосование и координатор. ClickHouse Принесите свой собственный keeper компоненты. Шардинг, реплика, хранитель Развертывание узла показано в таблице ниже.

IP

имя хоста

роль экземпляра

ClickHouse Keeper

172.18.4.126

node1

Осколок 1 реплика 1

*

172.18.4.188

node2

Осколок 1 Реплика 2

*

172.18.4.71

node3

Осколок 2 Реплика 1

*

172.18.4.86

node4

Осколок 2 Реплика 2

Язык кода:txt
копировать
    ClickHouse Процесс развертывания кластера см. в разделе «[ClickHouse Развертывание кластера (не требуется) Zookeeper)](https://blog.csdn.net/wzy0623/article/details/137809306)». Также в 172.18.16.156 Установить на MySQL,И запустить два примера, откопировать,Экземпляр основной библиотекииспользует порт 3306.,из экземпляра библиотекииспользуйте порт 3307.

2. Установите и настройте MySQL

Язык кода:txt
копировать
    Конфигурация установки MySQL Один главный и один двойной экземпляр.

1. Создайте пользователя MySQL.

Язык кода:javascript
копировать
# root использовать при исполнении
добавить пользователя mysql
passwd mysql

2. Создайте каталог, используемый MySQL.

Язык кода:javascript
копировать
# создаватьданные Оглавление,убеждатьсяданные Оглавление mysqldata пусто
mkdir -p /data/3306/mysqldata
 
# создавать binlog Оглавление
mkdir -p /data/3306/dblog
 
# создаватьвременный Оглавление
mkdir -p /data/3306/tmp
 
# Исправлять Оглавление Владелец mysql
chown -R mysql:mysql /data
 
# делатьиспользовать mysql Пользователи use выполняют следующие действия в процессе установки
su - mysql

3. Разархивируйте установочный пакет.

Язык кода:javascript
копировать
# Войдите в установку Оглавление
cd ~
 
# пакет отtar для извлечения файлов
tar xvf mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz
 
# Учреждатьмягкое соединение
ln -s mysql-8.0.16-linux-glibc2.12-x86_64 mysql-8.0.16

4. Настройте переменные среды

Язык кода:javascript
копировать
# Воля MySQL Где находится исполняемый файл Оглавление добавить приезжать $PATH в переменных среды
# Редактировать файл
vim ~/.bash_profile
 
# Измените или добавьте следующие две строки
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/mysql/mysql-8.0.16/bin
export PATH
 
# Сделайте конфигурацию эффективной
source ~/.bash_profile

5. Создайте файл конфигурации MySQL.

Язык кода:javascript
копировать
# Редактировать файл
vim /home/mysql/my_3306.cnf

Содержимое файла следующее:

[mysqld]
max_allowed_packet=1G
log_timestamps=system
binlog_transaction_dependency_tracking  = WRITESET
transaction_write_set_extraction        = XXHASH64
 
binlog_expire_logs_seconds=259200
lower_case_table_names=1
secure_file_priv=''
log_bin_trust_function_creators=on
character-set-server = utf8mb4
default_authentication_plugin=mysql_native_password
basedir=/home/mysql/mysql-8.0.16-linux-glibc2.12-x86_64
datadir=/data/3306/mysqldata
socket=/data/3306/mysqldata/mysql.sock
 
wait_timeout=30
innodb_buffer_pool_size = 16G
max_connections = 1000
 
default-time-zone = '+8:00'
 
port = 3306
skip-name-resolve 
user=mysql
 
innodb_print_all_deadlocks=1
log_output='table'
slow_query_log = 1
long_query_time = 1
 
tmp_table_size = 32M
 
# включать binlog
log-bin=/data/3306/dblog/mysql-bin
log-bin-index = /data/3306/dblog/mysql-bin.index 
 
tmpdir = /data/3306/tmp
 
server-id = 1563306
 
innodb_data_file_path = ibdata1:1G:autoextend
innodb_data_home_dir = /data/3306/mysqldata
 
innodb_log_buffer_size = 16M
innodb_log_file_size = 1G
innodb_log_files_in_group = 3
innodb_log_group_home_dir=/data/3306/dblog
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
 
gtid-mode = on
enforce_gtid_consistency=true
 
local_infile=0
log_error='/data/3306/mysqldata/master.err'
skip_symbolic_links=yes
 
[mysqldump]
quick
max_allowed_packet = 1G
 
[mysqld_safe]
open-files-limit = 8192
Язык кода:txt
копировать
    Необходимо установить следующие три параметра:
Язык кода:javascript
копировать
default_authentication_plugin=mysql_native_password
gtid-mode = on
enforce_gtid_consistency=true
Язык кода:txt
копировать
    Если не установлено по умолчанию\_аутентификация\_плагин, ClickHouse Создано в MySQL Библиотека данных двигателя сообщит о следующей ошибке:
Язык кода:javascript
копировать
Received exception from server (version 24.1.8):
Code: 695. DB::Exception: Received from localhost:9000. DB::Exception: There was an error on [node2:9000]: Code: 695. DB::Exception: Load job 'startup MaterializedMySQL database test_mysql' failed: Code: 537. DB::Exception: Illegal MySQL variables, the MaterializedMySQL engine requires default_authentication_plugin='mysql_native_password'. (ILLEGAL_MYSQL_VARIABLE),. (ASYNC_LOAD_FAILED) (version 24.1.8.22 (official build)). (ASYNC_LOAD_FAILED)
Язык кода:txt
копировать
Если не запускается, используйте GTID, в ClickHouse Создано в MySQL Библиотека данных двигателя сообщит о следующей ошибке:
Язык кода:javascript
копировать
Received exception from server (version 24.1.8):
Code: 1002. DB::Exception: Received from localhost:9000. DB::Exception: The replication sender thread cannot start in AUTO_POSITION mode: this server has GTID_MODE = OFF instead of ON.. ()

6. Инициализация системы MySQL

Язык кода:javascript
копировать
mysqld --defaults-file=/home/mysql/my_3306.cnf --initialize

7. Запустите сервер MySQL.

Язык кода:javascript
копировать
mysqld_safe --defaults-file=/home/mysql/my_3306.cnf &

8. Создайте пользователя dba.

Язык кода:javascript
копировать
# соединять mysql сервер
mysql -u root -p -S /data/3306/mysqldata/mysql.sock
 
-- Исправлять root использоватьпароль
alter user user() identified by "123456";
 
-- создать новое из dba счет
create user 'dba'@'%' identified with mysql_native_password by '123456';
grant all on *.* to 'dba'@'%' with grant option;
Язык кода:txt
копировать
    Повторить 2 - 8 шаг,Воля 3306 Заменить на 3307, создатель экземпляра библиотеки.

3. Настройте мастер-подчиненную репликацию MySQL.

Язык кода:txt
копировать
    3306 Выполнение экземпляра основной библиотеки:
Язык кода:javascript
копировать
-- Посмотреть скопировать местоположение
show master status;
-- создаватькопироватьиспользоватьаккаунт и авторизация
create user 'repl'@'%' identified with mysql_native_password by '123456';
grant replication client,replication slave on *.* to 'repl'@'%';
-- создать таблицу и данные тестовой библиотеки
create database test;
create table test.t1 (
  id bigint(20) not null auto_increment,
  remark varchar(32) default null comment 'Ремарк',createtime timestamp not null default current_timestamp comment 'создаватьвремя',  primary key (id));
insert into test.t1 (remark) values («Первая строка: строка1»), («Вторая строка: строка2»), («Третья строка: строка3»);
Язык кода:txt
копировать
    Выход:
Язык кода:javascript
копировать
mysql> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000001 |      977 |              |                  | ba615057-e11c-11ee-b80e-246e961c91f8:1-3 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)
 
mysql> create user 'repl'@'%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.01 sec)
 
mysql> grant replication client,replication slave on *.* to 'repl'@'%';
Query OK, 0 rows affected (0.00 sec)
 
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
 
mysql> create table test.t1 (
    ->   id bigint(20) not null auto_increment,
    ->   remark varchar(32) default null comment 'Ремарк',
    ->   createtime timestamp not null default current_timestamp comment 'создаватьвремя',    ->   primary key (id));
Query OK, 0 rows affected (0.01 sec)
 
mysql> insert into test.t1 (remark) values («Первая строка: строка1»), («Вторая строка: строка2»), («Третья строка: строка3»);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
Язык кода:txt
копировать
    3307 от выполнения экземпляра библиотеки:
Язык кода:javascript
копировать
change master to
master_host='172.18.16.156',
master_port=3306,
master_user='repl',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=977;
 
start slave;
show slave status\G
select user,host from mysql.user;
select * from test.t1;
Язык кода:txt
копировать
    Выход:
Язык кода:javascript
копировать
mysql> change master to
    -> master_host='172.18.16.156',
    -> master_port=3306,
    -> master_user='repl',
    -> master_password='123456',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=977;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
 
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
 
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.18.16.156
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 2431
               Relay_Log_File: vvgg-z2-music-mysqld-relay-bin.000002
                Relay_Log_Pos: 1776
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 2431
              Relay_Log_Space: 1999
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1563306
                  Master_UUID: ba615057-e11c-11ee-b80e-246e961c91f8
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: ba615057-e11c-11ee-b80e-246e961c91f8:4-8
            Executed_Gtid_Set: ba615057-e11c-11ee-b80e-246e961c91f8:4-8,
c2df1946-e11c-11ee-8026-246e961c91f8:1-3
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
       Master_public_key_path: 
        Get_master_public_key: 0
            Network_Namespace: 
1 row in set (0.00 sec)
 
mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| dba              | %         |
| repl             | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
 
mysql> select * from test.t1;
+----+------------------+---------------------+
| id | remark           | createtime          |
+----+------------------+---------------------+
|  1 | Первая строка: строка1     | 2024-04-19 08:46:25 |
|  2 | Вторая строка: строка2     | 2024-04-19 08:46:25 |
|  3 | Третий ряд: ряд3     | 2024-04-19 08:46:25 |
+----+------------------+---------------------+
3 rows in set (0.00 sec)
Язык кода:txt
копировать
    Сведения о соответствующих конфигурациях мастера откопирования MySQL см. в разделе «[Настройка асинхронного копирования](https://wxy0327.blog.csdn.net/article/details/90081518#t6)».

4. Создайте базу данных движка MySQL в ClickHouse.

Язык кода:javascript
копировать
set allow_experimental_database_materialized_mysql=1;
create database test_mysql on cluster cluster_2S_2R
engine = MaterializeMySQL('172.18.16.156:3307', 'test', 'dba', '123456');
Язык кода:txt
копировать
    Если не установлено allow\_experimental\_database\_materialized\_mysql=1 Будет сообщено о следующей ошибке:
Язык кода:javascript
копировать
Received exception from server (version 24.1.8):
Code: 336. DB::Exception: Received from localhost:9000. DB::Exception: There was an error on [node3:9000]: Code: 336. DB::Exception: MaterializedMySQL is an experimental database engine. Enable allow_experimental_database_materialized_mysql to use it. (UNKNOWN_DATABASE_ENGINE) (version 24.1.8.22 (official build)). (UNKNOWN_DATABASE_ENGINE)
Язык кода:txt
копировать
    Выход:
Язык кода:javascript
копировать
vvml-yz-hbase-test.172.18.4.188 :) set allow_experimental_database_materialized_mysql=1;

SET allow_experimental_database_materialized_mysql = 1

Query id: 7ce08dff-8d1e-496f-a1af-39c5bec41643

Ok.

0 rows in set. Elapsed: 0.001 sec. 

vvml-yz-hbase-test.172.18.4.188 :) create database test_mysql on cluster cluster_2S_2R
engine = MaterializeMySQL('172.18.16.156:3307', 'test', 'dba', '123456');

CREATE DATABASE test_mysql ON CLUSTER cluster_2S_2R
ENGINE = MaterializeMySQL('172.18.16.156:3307', 'test', 'dba', '123456')

Query id: 610e3c86-c5b6-477c-b4a3-33624809d05c

┌─host──┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ node4 │ 9000 │      0 │       │                   3 │                0 │
│ node3 │ 9000 │      0 │       │                   2 │                0 │
│ node2 │ 9000 │      0 │       │                   1 │                0 │
│ node1 │ 9000 │      0 │       │                   0 │                0 │
└───────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘

4 rows in set. Elapsed: 0.086 sec. 

vvml-yz-hbase-test.172.18.4.188 :)
Язык кода:txt
копировать
    Вы можете сделать запрос сейчас MySQL из Библиотечный столданные:
Язык кода:javascript
копировать
vvml-yz-hbase-test.172.18.4.188 :) select * from test_mysql.t1;

SELECT *
FROM test_mysql.t1

Query id: bae55b87-6e80-4e7f-a2c7-b9312ffef999

┌─id─┬─remark───────┬──────────createtime─┐
│  1 │ Первая строка: строка1 │ 2024-04-19 08:46:25 │
│  2 │ Вторая строка: строка2 │ 2024-04-19 08:46:25 │
│  3 │ Третий ряд: ряд3 │ 2024-04-19 08:46:25 │
└────┴──────────────┴─────────────────────┘

3 rows in set. Elapsed: 0.002 sec. 

vvml-yz-hbase-test.172.18.4.188 :) 

5. Создайте материализованное представление в ClickHouse

Язык кода:javascript
копировать
-- создаватьданные Библиотека
create database db1 on cluster cluster_2S_2R;

-- создавать Основная поверхность земли
create table db1.t1 on cluster cluster_2S_2R
( 
  id Int64,
  remark Nullable(String),
  createtime timestamp,
  primary key id)
engine = ReplicatedMergeTree(
    '/clickhouse/tables/{shard}/t1',
    '{replica}')
order by id;

-- создать распределенную таблицу
create table db1.t1_replica_all ON CLUSTER 'cluster_2S_2R'
as db1.t1
engine = Distributed(cluster_2S_2R, db1, t1, rand());

-- создать материализованный вид
create materialized view db1.t1_mv on cluster cluster_2S_2R
to db1.t1_replica_all
as
select * from test_mysql.t1;
Язык кода:txt
копировать
    Уведомлениесоздаватьместное времяизданные Тип и разрешено ли этопустоизсвойство,Все должно соответствовать типу таблицы MySQL «изданные».,В противном случае будет сообщено об ошибке, аналогичной следующей:
Язык кода:javascript
копировать
Received exception from server (version 24.1.8):
Code: 53. DB::Exception: Received from localhost:9000. DB::Exception: Type mismatch for column id. Column has type Int64, got type UInt64. (TYPE_MISMATCH)

Received exception from server (version 24.1.8):
Code: 53. DB::Exception: Received from localhost:9000. DB::Exception: Type mismatch for column remark. Column has type Nullable(String), got type String. (TYPE_MISMATCH)
Язык кода:txt
копировать
    Тип данных соответствует следующему рисунку:

6. Обновление данных материализованного представления.

1. Первоначальная загрузка данных

Язык кода:txt
копировать
ClickHouse по умолчанию не выполняет начальную загрузку данных при материализованных представлениях. Существует два метода начальной загрузки.,Один находится в создании материализованный видпосланник временииспользовать POPULATE。POPULATE Ключевые слова определяют стратегию обновления материализованного представления:
  • Если так POPULATE Тогда в представлении создателя процесса исходная таблица уже существует, и изданные будут импортированы вместе.,Аналогично созданию таблицы... как
  • Если не POPULATE Тогда материализованное представление не будет иметь данных после создания и будет записано в исходную таблицу «изданные» только после синхронизации создателя материализованного представления.
Язык кода:txt
копировать
    ClickHouse Официально не рекомендуется использоватьиспользовать POPULATE,Потому что в создании материализованный видиз Пишите одновременно во время процессаизданные Невозможно вставить в материализованныйвид。В этом примере используетсяиспользовать TO [db].[table] Синтаксис: выполните начальную загрузку данных вручную после создания материализованного представления.
Язык кода:javascript
копировать
-- MySQL от Библиотекаостанавливатьсякопировать
stop slave;

-- ClickHouse Первоначальная загрузка материализованных представлений
insert into db1.t1_mv(id,remark,createtime) select * from test_mysql.t1;

-- MySQL от Библиотекавключатькопировать
start slave;
Язык кода:txt
копировать
    Такое простое предложение – залог достижения первоначальной нагрузки. Остановка библиотеки от не повлияет на нормальное использование основной библиотеки и не повлияет на бизнес. В это время библиотека находится в статическом состоянии и не будет меняться, что позволяет легко получить стоковые данные. Затем выполните обычный из insert ... select Оператор вставляет данные в материализованное представление, и данные фактически записываются. db1.t1\_replica\_all поверхность. позже в ClickHouse В любом экземпляре кластера вы можете запросить один и тот же запрос в материализованном представлении. MySQL Запасданные。
Язык кода:javascript
копировать
vvml-yz-hbase-test.172.18.4.86 :) select * from db1.t1_replica_all;

SELECT *
FROM db1.t1_replica_all

Query id: 5063cd12-6eba-4a81-9c75-d892cb152b17

┌─id─┬─remark───────┬──────────createtime─┐
│  1 │ Первая строка: строка1 │ 2024-04-19 08:46:25 │
│  2 │ Вторая строка: строка2 │ 2024-04-19 08:46:25 │
│  3 │ Третий ряд: ряд3 │ 2024-04-19 08:46:25 │
└────┴──────────────┴─────────────────────┘

3 rows in set. Elapsed: 0.004 sec. 

vvml-yz-hbase-test.172.18.4.86 :) select * from db1.t1_mv;

SELECT *
FROM db1.t1_mv

Query id: e319f96b-f299-41a1-b730-737a42ceedb0

┌─id─┬─remark───────┬──────────createtime─┐
│  1 │ Первая строка: строка1 │ 2024-04-19 08:46:25 │
│  2 │ Вторая строка: строка2 │ 2024-04-19 08:46:25 │
│  3 │ Третий ряд: ряд3 │ 2024-04-19 08:46:25 │
└────┴──────────────┴─────────────────────┘

3 rows in set. Elapsed: 0.006 sec. 

vvml-yz-hbase-test.172.18.4.86 :) 

2. Постепенное обновление данных.

Язык кода:txt
копировать
ClickHouse из материализованных представлений можно обновить после базовых данных.,Автоматически обновлять себяизданные。данные Обновление включает в себя два аспектаизизменять:базовый столизданные Исправлятьи Стол базовый изданный новый。
  • базовый столизданные Исправлять
Язык кода:txt
копировать
    еслибазовый столизданные Исправлять,материализоватьсявидбудет обновляться автоматически。Это через ClickHouse издвигательиметод хранения для достиженияиз。когдабазовый столиз Строка записей есть Исправлять,ClickHouse Будет ли «Волятис Исправлять» трансформироваться в новое из INSERT заявление,и Воляего отправкаприезжатьматериализоватьсявидсередина。так,Материализованные представления могут автоматически обновляться.
  • Стол базовый изданный новый
Язык кода:txt
копировать
    Если Стол базовый изданный новый,материализоватьсявидтакой же样будет обновляться автоматически。Это через设置материализоватьсявидизмеханизм обновления для достиженияиз。Существует два типа механизмов обновления.:Регулярное обновлениеи Автоматическое обновление。
Язык кода:txt
копировать
    Следует отметить, что ClickHouse из материализованного представления может автоматически обновлять данные,Но это приведет к некоторой потере производительности.,Особенно, когда базовый размер таблицы велик. поэтому,При проектировании материализованных представлений,Этот фактор необходимо учитывать,Выберите правильный одновременноиз Механизм обновления для балансировки производительностииданныев реальном времениизнуждаться。
Язык кода:txt
копировать
    Конечно, поскольку вы выбрали ClickHouse,В сцену makeuse необходимо добавить дополнительные данные.,И редко хожу Исправлятьилиудалить.Для общих требований реального времени не высокиизбизнес-сценарий,Регулярного обновления вполне достаточно.
Язык кода:javascript
копировать
-- MySQL хозяин Библиотека Исправлятьданные
insert into test.t1 (remark) values («Четвертая строка: строка4»);
update test.t1 set remark = 'Пятая строка: row5' where id = 4;
delete from test.t1 where id =1;
insert into test.t1 (remark) values («Шестая строка: строка6»);

в это время MySQL изданныеследующее:
mysql> select * from test.t1;
+----+------------------+---------------------+
| id | remark           | createtime          |
+----+------------------+---------------------+
|  2 | Вторая строка: строка2     | 2024-04-19 08:46:25 |
|  3 | Третий ряд: ряд3     | 2024-04-19 08:46:25 |
|  4 | Пятый ряд: row5     | 2024-04-19 11:24:33 |
|  5 | Ряд 6: ряд6     | 2024-04-19 11:56:20 |
+----+------------------+---------------------+
4 rows in set (0.00 sec)
Язык кода:txt
копировать
    ClickHouse Запрос данных, запрос материализованного представления во всех экземплярах возвращает одни и те же изданные:
Язык кода:javascript
копировать
vvml-yz-hbase-test.172.18.4.86 :) select * from db1.t1_mv order by id;

SELECT *
FROM db1.t1_mv
ORDER BY id ASC

Query id: 1e3f8bb3-6fdd-4f3e-a494-af8c72e3dab2

┌─id─┬─remark───────┬──────────createtime─┐
│  1 │ Первая строка: строка1 │ 2024-04-19 08:46:25 │
└────┴──────────────┴─────────────────────┘
┌─id─┬─remark───────┬──────────createtime─┐
│  1 │ Первая строка: строка1 │ 2024-04-19 08:46:25 │
│  1 │ Первая строка: строка1 │ 2024-04-19 08:46:25 │
│  1 │ Первая строка: строка1 │ 2024-04-19 08:46:25 │
│  1 │ Первая строка: строка1 │ 2024-04-19 08:46:25 │
│  2 │ Вторая строка: строка2 │ 2024-04-19 08:46:25 │
│  3 │ Третий ряд: ряд3 │ 2024-04-19 08:46:25 │
└────┴──────────────┴─────────────────────┘
┌─id─┬─remark───────┬──────────createtime─┐
│  4 │ Четвертая строка: row4 │ 2024-04-19 11:24:33 │
└────┴──────────────┴─────────────────────┘
┌─id─┬─remark───────┬──────────createtime─┐
│  4 │ Пятый ряд: row5 │ 2024-04-19 11:24:33 │
└────┴──────────────┴─────────────────────┘
┌─id─┬─remark───────┬──────────createtime─┐
│  4 │ Четвертая строка: row4 │ 2024-04-19 11:24:33 │
│  4 │ Пятый ряд: row5 │ 2024-04-19 11:24:33 │
│  4 │ Четвертая строка: row4 │ 2024-04-19 11:24:33 │
│  4 │ Четвертая строка: row4 │ 2024-04-19 11:24:33 │
│  4 │ Пятый ряд: row5 │ 2024-04-19 11:24:33 │
│  4 │ Пятый ряд: row5 │ 2024-04-19 11:24:33 │
└────┴──────────────┴─────────────────────┘
┌─id─┬─remark───────┬──────────createtime─┐
│  5 │ Ряд 6: ряд6 │ 2024-04-19 11:56:20 │
└────┴──────────────┴─────────────────────┘
┌─id─┬─remark───────┬──────────createtime─┐
│  5 │ Ряд 6: ряд6 │ 2024-04-19 11:56:20 │
└────┴──────────────┴─────────────────────┘

17 rows in set. Elapsed: 0.005 sec. 
Язык кода:txt
копировать
Запросить локальную таблицу,Реплики одного и того же осколка возвращают одинаковые результаты.,Разные осколки отличаются:
Язык кода:javascript
копировать
-- node1
vvml-yz-hbase-test.172.18.4.126 :) select * from db1.t1 order by id;

SELECT *
FROM db1.t1
ORDER BY id ASC

Query id: c4d50038-f73f-4989-948e-031d6ff5d5ee

┌─id─┬─remark───────┬──────────createtime─┐
│  1 │ Первая строка: строка1 │ 2024-04-19 08:46:25 │
│  1 │ Первая строка: строка1 │ 2024-04-19 08:46:25 │
│  1 │ Первая строка: строка1 │ 2024-04-19 08:46:25 │
│  1 │ Первая строка: строка1 │ 2024-04-19 08:46:25 │
│  2 │ Вторая строка: строка2 │ 2024-04-19 08:46:25 │
│  3 │ Третий ряд: ряд3 │ 2024-04-19 08:46:25 │
│  4 │ Четвертая строка: row4 │ 2024-04-19 11:24:33 │
│  4 │ Пятый ряд: row5 │ 2024-04-19 11:24:33 │
│  4 │ Четвертая строка: row4 │ 2024-04-19 11:24:33 │
│  4 │ Четвертая строка: row4 │ 2024-04-19 11:24:33 │
│  4 │ Пятый ряд: row5 │ 2024-04-19 11:24:33 │
│  4 │ Пятый ряд: row5 │ 2024-04-19 11:24:33 │
└────┴──────────────┴─────────────────────┘
┌─id─┬─remark───────┬──────────createtime─┐
│  5 │ Ряд 6: ряд6 │ 2024-04-19 11:56:20 │
└────┴──────────────┴─────────────────────┘

13 rows in set. Elapsed: 0.002 sec. 

vvml-yz-hbase-test.172.18.4.126 :) 

-- node3
vvml-yz-hbase-test.172.18.4.71 :) select * from db1.t1 order by id;

SELECT *
FROM db1.t1
ORDER BY id ASC

Query id: e91e72b7-508a-48a2-b08f-779e49b7cd01

┌─id─┬─remark───────┬──────────createtime─┐
│  1 │ Первая строка: строка1 │ 2024-04-19 08:46:25 │
└────┴──────────────┴─────────────────────┘
┌─id─┬─remark───────┬──────────createtime─┐
│  4 │ Четвертая строка: row4 │ 2024-04-19 11:24:33 │
└────┴──────────────┴─────────────────────┘
┌─id─┬─remark───────┬──────────createtime─┐
│  4 │ Пятый ряд: row5 │ 2024-04-19 11:24:33 │
└────┴──────────────┴─────────────────────┘
┌─id─┬─remark───────┬──────────createtime─┐
│  5 │ Ряд 6: ряд6 │ 2024-04-19 11:56:20 │
└────┴──────────────┴─────────────────────┘

4 rows in set. Elapsed: 0.002 sec. 

vvml-yz-hbase-test.172.18.4.71 :) 
Язык кода:txt
копировать
    MySQL В данных всего три строки, ClickHouse Но там 17 строк. ID=1 из в соответствии MySQL было удалено в , а в ClickHouse не удалили, а изменили на 5 строк. Хотя при определении локальной таблицы мы указали id Поле является первичным ключом, но ClickHouse Настраиваемые первичные ключи в из не гарантируют уникальность даже для локальных таблиц. ID=2 и ID=3 из в соответствии MySQL Нет никаких изменений в ClickHouse Они также являются единственными в линейке. ID=4 из в соответствии MySQL В первом новом посте Исправлять,существовать ClickHouse данные добавляются в обоих. ID=6 из в соответствии MySQL Добавьте новую строку в ClickHouse Добавлены две строки. Правила шардинга распределенных таблициспользоватьиз случайны, почему MySQL Добавить новые данные, приезжать ClickHouse Вы записали оба шарда?
Язык кода:txt
копировать
    Эксперимент приехать. Это обеспечивает синхронизацию данных в реальном времени, но ClickHouse Очевидно, что в изданных гораздо больше строк, что связано с выбором механизма таблицы и использованием правил сегментирования. Это относительно сложно, и объяснение данных также стало очень важным. Итак, вывод заключается в том, что мы должны использовать ClickHouse,Лучше регулярно импортировать данные из источника, это более надежно.,И лучше всего добавлять данные только на стороне источника.

ссылка:

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода