wiki:rozaniec_mariadb
no way to compare when less than two revisions
Różnice
Różnice między wybraną wersją a wersją aktualną.
— | wiki:rozaniec_mariadb [2022/10/05 17:29] (aktualna) – utworzono 127.0.0.1 | ||
---|---|---|---|
Linia 1: | Linia 1: | ||
+ | ====== Różaniec w MariaDB ====== | ||
+ | Postanowiłem zrobić bazę danych w MariaDB, która jest w stanie bardzo szybko odmawiać różaniec. | ||
+ | |||
+ | < | ||
+ | MariaDB [rozaniec]> | ||
+ | +-------+-------------+------+-----+---------+----------------+ | ||
+ | | Field | Type | Null | Key | Default | Extra | | ||
+ | +-------+-------------+------+-----+---------+----------------+ | ||
+ | | id | int(11) | ||
+ | | tytul | varchar(50) | YES | | NULL | | | ||
+ | | slowa | text | YES | | NULL | | | ||
+ | +-------+-------------+------+-----+---------+----------------+ | ||
+ | 3 rows in set (0.001 sec) | ||
+ | |||
+ | MariaDB [rozaniec]> | ||
+ | +--------+-------------+------+-----+---------+----------------+ | ||
+ | | Field | Type | Null | Key | Default | Extra | | ||
+ | +--------+-------------+------+-----+---------+----------------+ | ||
+ | | id | int(11) | ||
+ | | rodzaj | varchar(40) | YES | | NULL | | | ||
+ | | numer | smallint(6) | YES | | NULL | | | ||
+ | | nazwa | varchar(60) | YES | | NULL | | | ||
+ | +--------+-------------+------+-----+---------+----------------+ | ||
+ | 4 rows in set (0.001 sec) | ||
+ | |||
+ | MariaDB [rozaniec]> | ||
+ | +-------+------------+------+-----+---------+-------+ | ||
+ | | Field | Type | Null | Key | Default | Extra | | ||
+ | +-------+------------+------+-----+---------+-------+ | ||
+ | | tik | tinyint(1) | YES | | NULL | | | ||
+ | +-------+------------+------+-----+---------+-------+ | ||
+ | 1 row in set (0.001 sec) | ||
+ | </ | ||
+ | |||
+ | Ponieważ w tabeli licznik umieszczany jest nowy wiersz po każdym różańcu, jest ona typu //Memory//, żeby szybciej działać. | ||
+ | |||
+ | Dla ułatwienia utworzono procedury: | ||
+ | |||
+ | < | ||
+ | MariaDB [rozaniec]> | ||
+ | +----------+---------------------+-----------+-----------------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | ||
+ | | Db | Name | Type | Definer | ||
+ | +----------+---------------------+-----------+-----------------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | ||
+ | | mysql | AddGeometryColumn | ||
+ | | mysql | DropGeometryColumn | ||
+ | | rozaniec | dziesiatek_rozanca | ||
+ | | rozaniec | odmawianie_rozanca | ||
+ | | rozaniec | poczatek_rozanca | ||
+ | | rozaniec | tajemnice_bolesne | ||
+ | | rozaniec | tajemnice_chwalebne | PROCEDURE | root@localhost | ||
+ | | rozaniec | tajemnice_radosne | ||
+ | | rozaniec | tajemnice_swiatla | ||
+ | +----------+---------------------+-----------+-----------------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | ||
+ | 9 rows in set (0.001 sec) | ||
+ | </ | ||
+ | |||
+ | Procedury są bardzo proste i zawierają powtarzające się selecty słów poszczególnych modlitw: | ||
+ | |||
+ | < | ||
+ | MariaDB [rozaniec]> | ||
+ | +--------------------+-------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ | ||
+ | | Procedure | ||
+ | +--------------------+-------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ | ||
+ | | odmawianie_rozanca | STRICT_TRANS_TABLES, | ||
+ | BEGIN while 1=1 do call tajemnice_chwalebne(); | ||
+ | +--------------------+-------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ | ||
+ | 1 row in set (0.000 sec) | ||
+ | |||
+ | MariaDB [rozaniec]> | ||
+ | +---------------------+-------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ | ||
+ | | Procedure | ||
+ | +---------------------+-------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ | ||
+ | | tajemnice_chwalebne | STRICT_TRANS_TABLES, | ||
+ | BEGIN call poczatek_rozanca(); | ||
+ | +---------------------+-------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ | ||
+ | 1 row in set (0.001 sec) | ||
+ | </ | ||
+ | |||
+ | Malutki skrypt, który otwiera 24 połączenia do bazy danych oraz odmawia różaniec na 24 wątkach po 3,5GHz: | ||
+ | |||
+ | < | ||
+ | cat rozaniec.py | ||
+ | # | ||
+ | |||
+ | import subprocess | ||
+ | command = 'mysql -e "call odmawianie_rozanca()" | ||
+ | |||
+ | p1 = subprocess.Popen(command, | ||
+ | p2 = subprocess.Popen(command, | ||
+ | p3 = subprocess.Popen(command, | ||
+ | p4 = subprocess.Popen(command, | ||
+ | p5 = subprocess.Popen(command, | ||
+ | p6 = subprocess.Popen(command, | ||
+ | p7 = subprocess.Popen(command, | ||
+ | p8 = subprocess.Popen(command, | ||
+ | p9 = subprocess.Popen(command, | ||
+ | p10 = subprocess.Popen(command, | ||
+ | p11 = subprocess.Popen(command, | ||
+ | p12 = subprocess.Popen(command, | ||
+ | p13 = subprocess.Popen(command, | ||
+ | p14 = subprocess.Popen(command, | ||
+ | p15 = subprocess.Popen(command, | ||
+ | p16 = subprocess.Popen(command, | ||
+ | p17 = subprocess.Popen(command, | ||
+ | p18 = subprocess.Popen(command, | ||
+ | p19 = subprocess.Popen(command, | ||
+ | p20 = subprocess.Popen(command, | ||
+ | p21 = subprocess.Popen(command, | ||
+ | p22 = subprocess.Popen(command, | ||
+ | p23 = subprocess.Popen(command, | ||
+ | p24 = subprocess.Popen(command, | ||
+ | </ | ||
+ | |||
+ | Przekierowanie wyjścia do /dev/null nie jest wymagane, ale wąskim gardłem okazało się łącze sieciowe z serwera do laptopa, które nie nadążało z przesyłaniem słów modlitwy w celu wypisania ich na terminal. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Po jakimś czasie zaczyna robić się głośno. | ||
+ | |||
+ | Serwer jest w stanie odmawiać ponad dwieście tysięcy różańców w ciągu minuty. | ||
+ | |||
+ | < | ||
+ | MariaDB [rozaniec]> | ||
+ | +------------+ | ||
+ | | count(tik) | | ||
+ | +------------+ | ||
+ | | | ||
+ | +------------+ | ||
+ | 1 row in set (0.013 sec) | ||
+ | </ | ||
+ | |||
+ | Najprostszym sposobem na zatrzymanie podprocesów ze skryptu pythona jest restart bazy danych. | ||
+ | |||
+ | Prace optymalizacyjne trwają. |
wiki/rozaniec_mariadb.txt · ostatnio zmienione: 2022/10/05 17:29 przez 127.0.0.1