上一期講到Y(jié)CSB在RISC-V服務(wù)器上對MySQL進(jìn)行性能測試(RISC-V公測平臺發(fā)布 · 使用YCSB測試SG2042上的MySQL性能),在這一期文章中,我們繼續(xù)深入討論RISC-V+數(shù)據(jù)庫的應(yīng)用。本期就繼續(xù)利用HS-2平臺來測試數(shù)據(jù)庫軟件在RISC-V服務(wù)器上的兼容性。
參與此次實(shí)驗(yàn)的數(shù)據(jù)庫如下:
Redis
MongoDB5
PostgreSQL
TiDB
MySQL/MariaDB
實(shí)驗(yàn)機(jī)配置如下:
處理器:SG2042(64核心)
內(nèi)存:32GB
操作系統(tǒng):Ubuntu 22.10 (GNU/Linux 6.1.31 riscv64)
一、MySQL/MariaDB
在上一期中,為了測試YCSB(Yahoo! Cloud Serving Benchmark)性能測試軟件,順便測試了MySQL在RISC-V服務(wù)器上的兼容性。
MySQL數(shù)據(jù)庫服務(wù)是一個完全托管的數(shù)據(jù)庫服務(wù),可使用世界上最受歡迎的開源數(shù)據(jù)庫來部署云原生應(yīng)用程序。它是百分百由MySQL原廠開發(fā),管理和提供支持。
直接使用包管理器安裝MySQL:
sudo apt-get install mysql-server
當(dāng)然除了包管理器安裝,也嘗試了編譯安裝MySQL,結(jié)果提示編譯失敗,因此,MySQL不能直接通過編譯安裝MySQL,而需要在編譯之前打上相關(guān)補(bǔ)丁,然后再編譯。
同時也測試了MariaDB在RISC-V服務(wù)器上的兼容性,MariaDB是一個通用的開源關(guān)系數(shù)據(jù)庫管理系統(tǒng)。它是世界上最受歡迎的數(shù)據(jù)庫服務(wù)器之一, MariaDB在GPLv2開源許可下發(fā)布,并保證保持開源。
先嘗試直接通過包管理器安裝:
sudo apt-get install mariadb-server
在通過包管理器安裝并正常運(yùn)行后,接下來就嘗試通過編譯安裝MariaDB。
先下載MariaDB的源碼包并解壓:
wget
https://dlm.mariadb.com/3239838/MariaDB/mariadb-11.0.2/source/mariadb-11.0.2.tar.gz
進(jìn)入MariaDB源碼文件夾:
tar -xzvf mariadb-11.0.2.tar.gz
執(zhí)行cmake并編譯:
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb -DMYSQL_DATADIR=/home/mariadb
-DSYSCONFDIR=/etc -DWITHOUT_TOKUDB=1 -DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STPRAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWIYH_READLINE=1 -DWIYH_SSL=system -DVITH_ZLIB=system -DWITH_LOBWRAP=0
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
make -j64
sudo make install -j1
打開配置文件并編輯:
vim /home/mariadb/my.cnf
啟動服務(wù)器并測試是否能連接數(shù)據(jù)庫服務(wù)器:
sudo /usr/local/mariadb/bin/mysqld_safe --user=mysql --skip-grant-tables
/usr/local/mariadb/bin/mariadb
連接成功!
二、Redis
接下來就是Redis了,Redis全稱為REmote DIctionary Server(Redis), 由 Salvatore Sanfilippo編寫。是一個開源的、使用 ANSI C 語言編寫、遵守 BSD 協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存、分布式、可選持久性的鍵值對(Key-Value)的存儲數(shù)據(jù)庫,并提供多種語言的 API。
Redis 通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹担╲alue)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等類型。
通過APT安裝Redis:
sudo apt install redis-server
然后啟動Redis服務(wù):
sudo servcie redis-server start
進(jìn)入redis-cli:
redis-cli
如果能進(jìn)入Redis Shell那就說明安裝成功。
編譯安裝:
wget
https://github.com/redis/redis/archive/refs/tags/7.0.12.tar.gz
解壓:
tar -xzvf 7.0.12.tar.gz
進(jìn)入Redis文件夾:
cd redis-7.0.12/
編譯:
make BUILD_TLS=yes USE_SYSTEMD=yes -j64
測試一下(可選):
make test
安裝:
sudo make install
啟動服務(wù)器:
redis-server
redis-server &(后臺運(yùn)行)
運(yùn)行redis-benchmark壓力測試(10萬次請求,20個客戶端),以CSV文件形式輸出。
redis-benchmark -n 100000 -c 20 --csv
結(jié)果如下:
因此Redis通過APT安裝和編譯安裝兩種方式均可以。
三、MongoDB
接下來就是MongoDB,MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫。由 C++ 語言編寫。旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲解決方案。MongoDB 是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。
通過APT安裝MongoDB:
sudo apt install mongodb
結(jié)果提示不支持通過apt安裝,因此我們選擇源碼編譯安裝。
下載源碼包:
wget
https://fastdl.mongodb.org/src/mongodb-src-r6.0.8.tar.gz
解壓縮:
tar -xzvf mongodb-src-r6.0.8.tar.gz
進(jìn)入mongodb源碼文件夾:
cd mongodb-src-r6.0.8/
編譯:
python3 buildscripts/scons.py install-mongod -j64
結(jié)果編譯失?。?/p>
在安裝相關(guān)的包以后,依舊無法編譯。
四、PostgreSQL
然后就是PostgreSQL,PostgreSQL 是一個免費(fèi)的對象-關(guān)系數(shù)據(jù)庫服務(wù)器(ORDBMS),在靈活的BSD許可證下發(fā)行。PostgreSQL 開發(fā)者把它念作 post-gress-Q-L。PostgreSQL 的 Slogan 是 "世界上最先進(jìn)的開源關(guān)系型數(shù)據(jù)庫"。
通過APT安裝:
apt-get install postgresql postgresql-client
測試一下:
sudo -i -u postgres
psql
編譯安裝:
下載源代碼:
wget
https://ftp.postgresql.org/pub/source/v15.3/postgresql-15.3.tar.gz
解壓:
tar -xzvf postgresql-15.3.tar.gz
新建pg文件夾:
mkdir pg
進(jìn)入:
cd postgresql-15.3/
配置:
./configure --prefix=/home/perfxlab01/pg
編譯并安裝:
make world -j64
make install-world -j64
進(jìn)入~/pg/
初始化數(shù)據(jù)庫:
./bin/initdb -D ./data/
啟動數(shù)據(jù)庫:
bin/pg_ctl -D ./data/ -l logfile start
成功啟動數(shù)據(jù)庫后,接下來就是測試數(shù)據(jù)庫性能了。PostgreSQL和Redis一樣也自帶了壓力測試程序。
新建用于壓力測試的數(shù)據(jù)庫:
bin/psql -U postgres -h localhost
(進(jìn)入psql shell)
CREATE DATABASE test;
(退出psql shell)
初始化用于壓力測試的數(shù)據(jù)庫:
bin/pgbench -i test
開始壓力測試:
bin/pgbench -c 100 -T 300 -j 64 test
壓力測試結(jié)果如下:
pgbench (15.3)
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1
query mode: simple
number of clients: 100
number of threads: 64
maximum number of tries: 1
duration: 300 s
number of transactions actually processed: 93122
number of failed transactions: 0 (0.000%)
latency average = 322.405 ms
initial connection time = 156.199 ms
tps = 310.168586 (without initial connection time)
statement latencies in milliseconds and failures:
0.005 0 set aid random(1, 100000 * :scale)
0.002 0 set bid random(1, 1 * :scale)
0.002 0 set tid random(1, 10 * :scale)
0.002 0 set delta random(-5000, 5000)
0.201 0 BEGIN;
1.144 0 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
0.429 0 SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
290.788 0 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
26.624 0 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
0.432 0 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
2.556 0 END;
五、TiDB
接下來就是TiDB了,TiDB 是 PingCAP 公司自主設(shè)計、研發(fā)的開源分布式關(guān)系型數(shù)據(jù)庫。該數(shù)據(jù)庫使用Go語言編寫。
下載最新版的TiDB源碼包以后解壓并進(jìn)入源碼文件夾,然后編譯:
tar -xzvf tidb-7.1.1.tar.gz
cd tidb-7.1.1/
make
結(jié)果編譯失?。?/p>
同時也嘗試了通過腳本安裝,結(jié)果提示不支持該架構(gòu)。
總結(jié):
通過此次實(shí)驗(yàn),得出了以下結(jié)果。
1、上一期我就提到MySQL不支持直接通過編譯安裝,只能通過打Ubuntu提供的補(bǔ)丁才能編譯(詳見MySQL server fails to build on RISC-V 64),而MariaDB通過編譯安裝或包管理器安裝兩種方式均可以。但是通過編譯安裝后后續(xù)要作進(jìn)一步手工配置(教程見參考資料),而通過包管理器安裝系統(tǒng)自動給你配置好,開箱即用,因此建議通過APT(包管理器)安裝MySQL/MariaDB,更加省時方便。
2、目前測試的四款數(shù)據(jù)庫軟件中,MongoDB只有適用于Ubuntu 22.04 LTS的軟件包,而TiDB無論是腳本安裝還是編譯安裝均不支持riscv64。因此希望這兩個數(shù)據(jù)庫在RISC-V架構(gòu)上的支持再加把勁。
3、此次兼容性測試中表現(xiàn)最亮眼的是PostgreSQL和Redis,這兩者編譯下來都挺順利,而且還能正常運(yùn)行。說明這兩個數(shù)據(jù)庫對riscv64的兼容性做得是非常好。尤其是PostgreSQL,之前PostgreSQL BuildFarm里有社區(qū)成員使用riscv64平臺上的編譯器編譯成功了。因此PostgreSQL能夠在riscv64平臺上成功編譯并運(yùn)行就是必然的了。
4、Redis和PostgreSQL都自帶了壓力測試工具,Redis的redis-benchmark設(shè)置好壓力測試參數(shù),然后只要等測試結(jié)果出爐即可,而PostgreSQL的pgbench相比于redis-benchmark,只要在設(shè)置壓力測試參數(shù)前再加創(chuàng)建測試數(shù)據(jù)庫和初始化測試數(shù)據(jù)庫這兩步即可。因此,自帶壓力測試程序這一點(diǎn),對于這兩個數(shù)據(jù)庫來說是加分項(xiàng),因?yàn)槭褂米詭У膲毫y試程序可以幫助使用者了解到該服務(wù)器在數(shù)據(jù)庫方面上的性能。
參考資料:
MariaDB 簡介
Redis 教程https://www.runoob.com/redis/redis-tutorial.html
MongoDB官網(wǎng)https://www.mongodb.com/zh-cn
MongoDB開發(fā)者社區(qū)https://www.mongodb.com/community/forums/t/when-to-upload-version-on-debian/181125
mongodb-server binary package in Ubuntu Focal riscv64
https://launchpad.net/ubuntu/focal/riscv64/mongodb-server
MySQL server fails to build on RISC-V 64
https://bugs.mysql.com/bug.php?id=100356
部署Mariadb數(shù)據(jù)庫到Linux(源碼編譯安裝)
https://www.cnblogs.com/DragonStart/p/10823222.html
PostgreSQL BuildFarm Status
https://buildfarm.postgresql.org/cgi-bin/show_status.pl
PostgreSQL BuildFarm Status History
https://buildfarm.postgresql.org/cgi-bin/show_history.pl?nm=boomslang&br=REL_15_STABLE
TiDB
https://docs.pingcap.com/zh/tidb/stable