В этой демонстрации используется механизм базы данных MaterializeMySQL ClickHouse и материализованные представления для синхронизации данных в таблице библиотеки MySQL с таблицей библиотеки ClickHouse в реальном времени. Соответствующие версии программного обеспечения следующие:
Преимущество этого решения в том, что оно просто в эксплуатации и практически не требует дополнительной настройки.
Общая структура показана на рисунке ниже.
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 | |
ClickHouse Процесс развертывания кластера см. в разделе «[ClickHouse Развертывание кластера (не требуется) Zookeeper)](https://blog.csdn.net/wzy0623/article/details/137809306)». Также в 172.18.16.156 Установить на MySQL,И запустить два примера, откопировать,Экземпляр основной библиотекииспользует порт 3306.,из экземпляра библиотекииспользуйте порт 3307.
Конфигурация установки MySQL Один главный и один двойной экземпляр.
# root использовать при исполнении
добавить пользователя mysql
passwd mysql
# создаватьданные Оглавление,убеждатьсяданные Оглавление 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
# Войдите в установку Оглавление
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
# Воля MySQL Где находится исполняемый файл Оглавление добавить приезжать $PATH в переменных среды
# Редактировать файл
vim ~/.bash_profile
# Измените или добавьте следующие две строки
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/mysql/mysql-8.0.16/bin
export PATH
# Сделайте конфигурацию эффективной
source ~/.bash_profile
# Редактировать файл
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
Необходимо установить следующие три параметра:
default_authentication_plugin=mysql_native_password
gtid-mode = on
enforce_gtid_consistency=true
Если не установлено по умолчанию\_аутентификация\_плагин, ClickHouse Создано в MySQL Библиотека данных двигателя сообщит о следующей ошибке:
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)
Если не запускается, используйте GTID, в ClickHouse Создано в MySQL Библиотека данных двигателя сообщит о следующей ошибке:
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.. ()
mysqld --defaults-file=/home/mysql/my_3306.cnf --initialize
mysqld_safe --defaults-file=/home/mysql/my_3306.cnf &
# соединять 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;
Повторить 2 - 8 шаг,Воля 3306 Заменить на 3307, создатель экземпляра библиотеки.
3306 Выполнение экземпляра основной библиотеки:
-- Посмотреть скопировать местоположение
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»);
Выход:
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
3307 от выполнения экземпляра библиотеки:
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;
Выход:
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)
Сведения о соответствующих конфигурациях мастера откопирования MySQL см. в разделе «[Настройка асинхронного копирования](https://wxy0327.blog.csdn.net/article/details/90081518#t6)».
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');
Если не установлено allow\_experimental\_database\_materialized\_mysql=1 Будет сообщено о следующей ошибке:
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)
Выход:
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 :)
Вы можете сделать запрос сейчас MySQL из Библиотечный столданные:
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 :)
-- создаватьданные Библиотека
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;
Уведомлениесоздаватьместное времяизданные Тип и разрешено ли этопустоизсвойство,Все должно соответствовать типу таблицы MySQL «изданные».,В противном случае будет сообщено об ошибке, аналогичной следующей:
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)
Тип данных соответствует следующему рисунку:
ClickHouse по умолчанию не выполняет начальную загрузку данных при материализованных представлениях. Существует два метода начальной загрузки.,Один находится в создании материализованный видпосланник временииспользовать POPULATE。POPULATE Ключевые слова определяют стратегию обновления материализованного представления:
ClickHouse Официально не рекомендуется использоватьиспользовать POPULATE,Потому что в создании материализованный видиз Пишите одновременно во время процессаизданные Невозможно вставить в материализованныйвид。В этом примере используетсяиспользовать TO [db].[table] Синтаксис: выполните начальную загрузку данных вручную после создания материализованного представления.
-- MySQL от Библиотекаостанавливатьсякопировать
stop slave;
-- ClickHouse Первоначальная загрузка материализованных представлений
insert into db1.t1_mv(id,remark,createtime) select * from test_mysql.t1;
-- MySQL от Библиотекавключатькопировать
start slave;
Такое простое предложение – залог достижения первоначальной нагрузки. Остановка библиотеки от не повлияет на нормальное использование основной библиотеки и не повлияет на бизнес. В это время библиотека находится в статическом состоянии и не будет меняться, что позволяет легко получить стоковые данные. Затем выполните обычный из insert ... select Оператор вставляет данные в материализованное представление, и данные фактически записываются. db1.t1\_replica\_all поверхность. позже в ClickHouse В любом экземпляре кластера вы можете запросить один и тот же запрос в материализованном представлении. MySQL Запасданные。
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 :)
ClickHouse из материализованных представлений можно обновить после базовых данных.,Автоматически обновлять себяизданные。данные Обновление включает в себя два аспектаизизменять:базовый столизданные Исправлятьи Стол базовый изданный новый。
еслибазовый столизданные Исправлять,материализоватьсявидбудет обновляться автоматически。Это через ClickHouse издвигательиметод хранения для достиженияиз。когдабазовый столиз Строка записей есть Исправлять,ClickHouse Будет ли «Волятис Исправлять» трансформироваться в новое из INSERT заявление,и Воляего отправкаприезжатьматериализоватьсявидсередина。так,Материализованные представления могут автоматически обновляться.
Если Стол базовый изданный новый,материализоватьсявидтакой же样будет обновляться автоматически。Это через设置материализоватьсявидизмеханизм обновления для достиженияиз。Существует два типа механизмов обновления.:Регулярное обновлениеи Автоматическое обновление。
Следует отметить, что ClickHouse из материализованного представления может автоматически обновлять данные,Но это приведет к некоторой потере производительности.,Особенно, когда базовый размер таблицы велик. поэтому,При проектировании материализованных представлений,Этот фактор необходимо учитывать,Выберите правильный одновременноиз Механизм обновления для балансировки производительностииданныев реальном времениизнуждаться。
Конечно, поскольку вы выбрали ClickHouse,В сцену makeuse необходимо добавить дополнительные данные.,И редко хожу Исправлятьилиудалить.Для общих требований реального времени не высокиизбизнес-сценарий,Регулярного обновления вполне достаточно.
-- 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)
ClickHouse Запрос данных, запрос материализованного представления во всех экземплярах возвращает одни и те же изданные:
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.
Запросить локальную таблицу,Реплики одного и того же осколка возвращают одинаковые результаты.,Разные осколки отличаются:
-- 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 :)
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 Вы записали оба шарда?
Эксперимент приехать. Это обеспечивает синхронизацию данных в реальном времени, но ClickHouse Очевидно, что в изданных гораздо больше строк, что связано с выбором механизма таблицы и использованием правил сегментирования. Это относительно сложно, и объяснение данных также стало очень важным. Итак, вывод заключается в том, что мы должны использовать ClickHouse,Лучше регулярно импортировать данные из источника, это более надежно.,И лучше всего добавлять данные только на стороне источника.