-
Notifications
You must be signed in to change notification settings - Fork 26
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
0d540e5
commit 9aa260d
Showing
2 changed files
with
237 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,230 @@ | ||
--- | ||
title: ไฝฟ็จๅญๅ ธ่ฎฟ้ฎ MySQL ๅ Redis | ||
--- | ||
|
||
ๅจๆฌๆ็จไธญ๏ผๆไปฌๅฐๆๅฏผๆจไฝฟ็จ Databend ไธญ็ๅญๅ ธ่ฎฟ้ฎ MySQL ๅ Redis ๆฐๆฎใๆจๅฐๅญฆไน ๅฆไฝๅๅปบๆ ๅฐๅฐ่ฟไบๅค้จๆฐๆฎๆบ็ๅญๅ ธ๏ผไป่ๅฎ็ฐๆ ็ผ็ๆฐๆฎๆฅ่ฏขๅ้ๆใ | ||
|
||
## ๅผๅงไนๅ | ||
|
||
ๅจๅผๅงไนๅ๏ผ่ฏท็กฎไฟๆจ็ๆฌๅฐๆบๅจไธๅทฒๅฎ่ฃ [Docker](https://www.docker.com/)ใๆไปฌ้่ฆ Docker ๆฅ่ฎพ็ฝฎ DatabendใMySQL ๅ Redis ๆ้็ๅฎนๅจใๆจ่ฟ้่ฆไธไธช SQL ๅฎขๆท็ซฏๆฅ่ฟๆฅๅฐ MySQL๏ผๆไปฌๆจ่ไฝฟ็จ [BendSQL](/guides/sql-clients/bendsql/) ๆฅ่ฟๆฅ Databendใ | ||
|
||
## ๆญฅ้ชค 1๏ผ่ฎพ็ฝฎ็ฏๅข | ||
|
||
ๅจ่ฟไธๆญฅไธญ๏ผๆไปฌๅฐๅจๆจ็ๆฌๅฐๆบๅจไธไฝฟ็จ Docker ๅฏๅจ DatabendใMySQL ๅ Redis ็ๅฎไพใ | ||
|
||
1. ๅๅปบไธไธชๅไธบ `mynetwork` ็ Docker ็ฝ็ป๏ผไปฅๅฎ็ฐ DatabendใMySQL ๅ Redis ๅฎนๅจไน้ด็้ไฟก๏ผ | ||
|
||
```bash | ||
docker network create mynetwork | ||
``` | ||
|
||
2. ่ฟ่กไปฅไธๅฝไปค๏ผๅจ `mynetwork` ็ฝ็ปไธญๅฏๅจไธไธชๅไธบ `mysql` ็ MySQL ๅฎนๅจ๏ผ | ||
|
||
```bash | ||
docker run -d \ | ||
--name=mysql \ | ||
--network=mynetwork \ | ||
-e MYSQL_ROOT_PASSWORD=admin \ | ||
-p 3306:3306 \ | ||
mysql:latest | ||
``` | ||
|
||
3. ่ฟ่กไปฅไธๅฝไปค๏ผๅจ `mynetwork` ็ฝ็ปไธญๅฏๅจไธไธชๅไธบ `databend` ็ Databend ๅฎนๅจ๏ผ | ||
|
||
```bash | ||
docker run -d \ | ||
--name=databend \ | ||
--network=mynetwork \ | ||
-p 3307:3307 \ | ||
-p 8000:8000 \ | ||
-p 8124:8124 \ | ||
-p 8900:8900 \ | ||
datafuselabs/databend:nightly | ||
``` | ||
|
||
4. ่ฟ่กไปฅไธๅฝไปค๏ผๅจ `mynetwork` ็ฝ็ปไธญๅฏๅจไธไธชๅไธบ `redis` ็ Redis ๅฎนๅจ๏ผ | ||
|
||
```bash | ||
docker run -d \ | ||
--name=redis \ | ||
--network=mynetwork \ | ||
-p 6379:6379 \ | ||
redis:latest | ||
``` | ||
|
||
5. ้่ฟๆฃๆฅ `mynetwork` Docker ็ฝ็ป๏ผ้ช่ฏ DatabendใMySQL ๅ Redis ๅฎนๅจๆฏๅฆ่ฟๆฅๅฐๅไธ็ฝ็ป๏ผ | ||
|
||
```bash | ||
docker network inspect mynetwork | ||
|
||
[ | ||
{ | ||
"Name": "mynetwork", | ||
"Id": "ba8984e9ca07f49dd6493fd7c8be9831bda91c44595fc54305fc6bc241a77485", | ||
"Created": "2024-09-23T21:24:34.59324771Z", | ||
"Scope": "local", | ||
"Driver": "bridge", | ||
"EnableIPv6": false, | ||
"IPAM": { | ||
"Driver": "default", | ||
"Options": {}, | ||
"Config": [ | ||
{ | ||
"Subnet": "172.18.0.0/16", | ||
"Gateway": "172.18.0.1" | ||
} | ||
] | ||
}, | ||
"Internal": false, | ||
"Attachable": false, | ||
"Ingress": false, | ||
"ConfigFrom": { | ||
"Network": "" | ||
}, | ||
"ConfigOnly": false, | ||
"Containers": { | ||
"14d50cc4d075158a6d5fa4e6c8b7db60960f8ba1f64d6bceff0692c7e99f37b5": { | ||
"Name": "redis", | ||
"EndpointID": "e1d1015fea745bbbb34c6a9fb11010b6960a139914b7cc2c6a20fbca4f3b77d8", | ||
"MacAddress": "02:42:ac:12:00:04", | ||
"IPv4Address": "172.18.0.4/16", | ||
"IPv6Address": "" | ||
}, | ||
"276bc1023f0ea999afc41e063f1f3fe7404cb6fbaaf421005d5c05be343ce5e5": { | ||
"Name": "databend", | ||
"EndpointID": "ac915b9df2fef69c5743bf16b8f07e0bb8c481ca7122b171d63fb9dc2239f873", | ||
"MacAddress": "02:42:ac:12:00:03", | ||
"IPv4Address": "172.18.0.3/16", | ||
"IPv6Address": "" | ||
}, | ||
"95c21de94d27edc5e6fa8e335e0fd5bff12557fa30889786de9f483b8d111dbc": { | ||
"Name": "mysql", | ||
"EndpointID": "44fdf40de8c3d4c8fec39eb03ef1219c9cf1548e9320891694a9758dd0540ce3", | ||
"MacAddress": "02:42:ac:12:00:02", | ||
"IPv4Address": "172.18.0.2/16", | ||
"IPv6Address": "" | ||
} | ||
}, | ||
"Options": {}, | ||
"Labels": {} | ||
} | ||
] | ||
``` | ||
|
||
## ๆญฅ้ชค 2๏ผๅกซๅ ็คบไพๆฐๆฎ | ||
|
||
ๅจ่ฟไธๆญฅไธญ๏ผๆไปฌๅฐๅ MySQL ๅ Redis ไปฅๅ Databend ไธญๆทปๅ ็คบไพๆฐๆฎใ | ||
|
||
1. ๅจ Databend ไธญ๏ผๅๅปบไธไธชๅไธบ `users_databend` ็่กจๅนถๆๅ ฅ็คบไพ็จๆทๆฐๆฎ๏ผ | ||
|
||
```sql | ||
CREATE TABLE users_databend ( | ||
id INT, | ||
name VARCHAR(100) NOT NULL | ||
); | ||
|
||
INSERT INTO users_databend (id, name) VALUES | ||
(1, 'Alice'), | ||
(2, 'Bob'), | ||
(3, 'Charlie'); | ||
``` | ||
|
||
2. ๅจ MySQL ไธญ๏ผๅๅปบไธไธชๅไธบ `dict` ็ๆฐๆฎๅบ๏ผๅๅปบไธไธช `users` ่กจๅนถๆๅ ฅ็คบไพๆฐๆฎ๏ผ | ||
|
||
```sql | ||
CREATE DATABASE dict; | ||
USE dict; | ||
|
||
CREATE TABLE users ( | ||
id INT AUTO_INCREMENT PRIMARY KEY, | ||
name VARCHAR(100) NOT NULL, | ||
email VARCHAR(100) NOT NULL | ||
); | ||
|
||
INSERT INTO users (name, email) VALUES | ||
('Alice', '[email protected]'), | ||
('Bob', '[email protected]'), | ||
('Charlie', '[email protected]'); | ||
``` | ||
|
||
3. ๅจ Docker Desktop ๆ้่ฟๅจ็ป็ซฏไธญ่ฟ่ก `docker ps` ๆพๅฐๆจ็ Redis ๅฎนๅจ ID๏ผ | ||
|
||
![alt text](../../../../static/img/documents/tutorials/redis-container-id.png) | ||
|
||
4. ไฝฟ็จๆจ็ Redis ๅฎนๅจ ID ่ฎฟ้ฎ Redis CLI๏ผๅฐ `14d50cc4d075` ๆฟๆขไธบๆจ็ๅฎ้ ๅฎนๅจ ID๏ผ๏ผ | ||
|
||
```bash | ||
docker exec -it 14d50cc4d075 redis-cli | ||
``` | ||
|
||
5. ๅจ Redis CLI ไธญ่ฟ่กไปฅไธๅฝไปค๏ผๅฐ็คบไพ็จๆทๆฐๆฎๆๅ ฅ Redis๏ผ | ||
|
||
```bash | ||
SET user:1 '{"notifications": "enabled", "theme": "dark"}' | ||
SET user:2 '{"notifications": "disabled", "theme": "light"}' | ||
SET user:3 '{"notifications": "enabled", "theme": "dark"}' | ||
``` | ||
|
||
## ๆญฅ้ชค 3๏ผๅๅปบๅญๅ ธ | ||
|
||
ๅจ่ฟไธๆญฅไธญ๏ผๆไปฌๅฐๅจ Databend ไธญไธบ MySQL ๅ Redis ๅๅปบๅญๅ ธ๏ผ็ถๅไป่ฟไบๅค้จๆฐๆฎๆบๆฅ่ฏขๆฐๆฎใ | ||
|
||
1. ๅจ Databend ไธญ๏ผๅๅปบไธไธชๅไธบ `mysql_users` ็ๅญๅ ธ๏ผ่ฟๆฅๅฐ MySQL ๅฎไพ๏ผ | ||
|
||
```sql | ||
CREATE DICTIONARY mysql_users | ||
( | ||
id INT, | ||
name STRING, | ||
email STRING | ||
) | ||
PRIMARY KEY id | ||
SOURCE(MySQL( | ||
host='mysql' | ||
port=3306 | ||
username='root' | ||
password='admin' | ||
db='dict' | ||
table='users' | ||
)); | ||
``` | ||
|
||
2. ๅๅปบไธไธชๅไธบ `mysql_users` ็ๅญๅ ธ๏ผ่ฟๆฅๅฐ Redis ๅฎไพ๏ผ | ||
|
||
```sql | ||
CREATE DICTIONARY redis_user_preferences | ||
( | ||
user_id STRING, | ||
preferences STRING | ||
) | ||
PRIMARY KEY user_id | ||
SOURCE(Redis( | ||
host='redis' | ||
port=6379 | ||
)); | ||
``` | ||
|
||
3. ๆฅ่ฏขๆไปฌไนๅๅๅปบ็ MySQL ๅ Redis ๅญๅ ธไธญ็ๆฐๆฎใ | ||
|
||
```sql | ||
SELECT | ||
u.id, | ||
u.name, | ||
DICT_GET(mysql_users, 'email', u.id) AS email, | ||
DICT_GET(redis_user_preferences, 'preferences', CONCAT('user:', TO_STRING(u.id))) AS user_preferences | ||
FROM | ||
users_databend AS u; | ||
``` | ||
|
||
ไธ่ฟฐๆฅ่ฏขไป `users_databend` ่กจไธญๆฃ็ดข็จๆทไฟกๆฏ๏ผๅ ๆฌไปไปฌ็ ID ๅๅงๅ๏ผไปฅๅไป MySQL ๅญๅ ธไธญ่ทๅ็็ตๅญ้ฎไปถๅไป Redis ๅญๅ ธไธญ่ทๅ็็จๆทๅๅฅฝใ | ||
|
||
```sql title='็ปๆ๏ผ' | ||
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | ||
โ id โ name โ dict_get(default.mysql_users, 'email', u.id) โ dict_get(default.redis_user_preferences, 'preferences', CONCAT('user:', TO_STRING(u.id))) โ | ||
โ Nullable(Int32) โ String โ Nullable(String) โ Nullable(String) โ | ||
โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค | ||
โ 1 โ Alice โ alice@example.com โ {"notifications": "enabled", "theme": "dark"} โ | ||
โ 2 โ Bob โ bob@example.com โ {"notifications": "disabled", "theme": "light"} โ | ||
โ 3 โ Charlie โ charlie@example.com โ {"notifications": "enabled", "theme": "dark"} โ | ||
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | ||
``` |