Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

MariaDB CONNECT, SQLite ATTACH, CQRS

MariaDB CONNECT, SQLite ATTACH, CQRS
by

Łukasz Gogołkiewicz

on 26 August 2015

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of MariaDB CONNECT, SQLite ATTACH, CQRS

MariaDB CONNECT
SQLite ATTACH
CQRS

MariaDB
- darmowy fork MySQL
- stworzony po przejęciu MySQL-a przez Oracle
- rozwijany przez twórców MySQL-a
- od wersji 10 wiele nowych dodatków, których nie dostaniemy w darmowej wersji MySQL-a

SQLite
- biblioteka implementuje silnik SQL, dając możliwość używania bazy danych bez konieczności uruchamiania osobnego procesu RDBMS
Czym jest MariaDB i SQLite?
Co chcemy zrobić?
Połączyć się z bazą SQLite z poziomu MariaDB
Dlaczego?
Z danych z wielu tabel, chcemy stworzyć strukturę, którą będzie można przekazać do innego systemu korzystającego z SQLite
Środowisko testowe
Ubuntu 14.04.2 LTS
MariaDB 10.0.20
SQLite3 3.8.2
Instalacja niezbędnych narzędzi i bibliotek
Przygotowanie systemu
Usunięcie zainstalowanej biblioteki MySQL
# apt-get purge libmysqlclient18
Dodanie repozytorów MariaDB
# apt-get install software-properties-common
# apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
# add-apt-repository 'deb http://mariadb.kisiek.net//repo/10.0/ubuntu trusty main'
Instalacja serwera MariaDB, SQLite 3 oraz silnika CONNECT dla MariaDB
# apt-get install mariadb-server sqlite3 mariadb-connect-engine-10.0
Instalacja unixODBC i biliboteki SQLite do ODBC
# apt-get install unixodbc libsqliteodbc
Konfiguracja
MariaDB - aktywacja silnika CONNECT
# mysql -u root -p -e 'INSTALL SONAME "ha_connect";'
W przypadku gdy silnik CONNECT był już wcześniej zainstalowany, a przeprowadziliśmy reinstalację serwera MariaDB, trzeba z bazy usunąć informację na temat silnika CONNECT
# mysql -u root -p -e 'DELETE FROM mysql.plugin WHERE name="CONNECT";'
ODBC
Sprawdzamy, czy bibliotek SQLite została dodana do ODBC
# odbcinst -q -d
Spodziewany wynik
[SQLite]
[SQLite3]
Przygotowanie bazy SQLite
Utworzenie folderu dla plików SQLite
# mkdir -p /var/lib/sqlite
Utworzenie pliku SQLite
# sqlite3 /var/lib/sqlite/schema.sqlite
Stworzenie tabeli
sqlite> CREATE TABLE users (
id INT PRIMARY KEY NOT NULL,
username CHAR(32) NOT NULL,
password CHAR(128) NOT NULL,
email CHAR(128) NOT NULL,
is_active INT NOT NULL );
Sprawdzamy czy tabela została stworzona
sqlite> .tables
users
Uprawnienia dla bazy SQLite
# chmod -R 600 /var/lib/sqlite
# chown -R mysql.mysql /var/lib/sqlite
# chmod 700 /var/lib/sqlite
UWAGA!

Ważne, żeby nie tylko plik SQLite miał prawa do zapisu przez MySQL-a, ale również cały folder.
Przygotowanie bazy MariaDB
# mysql -u root -p
MariaDB [(none)]> CREATE SCHEMA schema;
MariaDB [(none)]> USE schema;
MariaDB [schema]> CREATE TABLE users (
id INT(11) NOT NULL,
username VARCHAR(32) NOT NULL,
password VARCHAR(128) NOT NULL,
email VARCHAR(128) NOT NULL,
is_active BOOLEAN
) ENGINE=CONNECT DEFAULT CHARSET=UTF8 TABLE_TYPE='ODBC' TABNAME='users' CONNECTION='Driver=SQLite3;Database=/var/lib/sqlite/schema.sqlite;version=3';
http://www.pantz.org/software/sqlite/unabletoopendbsqliteerror.html

https://dragkh.wordpress.com/2014/01/31/connect-to-sqlite3-database-or-to-flat-txt-file-via-connect-engine-of-mariadb-10-0-7-on-fedoracentos/

https://mariadb.com/kb/en/mariadb/connect/

https://www.safaribooksonline.com/library/view/mariadb-cookbook/9781783284399/ch05s02.html

http://www.sqlite.org/compile.html

http://www.sqlite.org/lang_attach.html

http://www.tutorialspoint.com/sqlite/sqlite_attach_database.htm

http://pkaczor.blogspot.com/2012/02/cqrsdddes-w-piguce.html

http://wrocnet.github.io/2015/03/11/75-spotkanie-wroclawskiej-grupy-net.html

http://blog.juglodz.pl/2015/05/2015-05-14-cqrs-zbyszko-papierski.html
Linki:
Gotowe!
Od tej pory jakiekolwiek zapytania na tabeli
users
, będą wywołane faktycznie na tabeli z pliku SQLite.
SQLite
Posiada podobną funkcjonalność jak silnik ENGINE w MariaDB - pozwala na podłączenie zewnętrznych baz danych.

Domyślnie można podłączyć do 10 zewnętrznych baz danych

Limit można zwiększyć maksymalnie do 125
(przy kompilacji należy zmienic wartość SQLITE_MAX_ATTACHED)
Jak używać
ATTACH DATABASE 'DatabaseName' AS 'AliasName'
Przykład
$ sqlite3 /path/to/sqlite/main.db
sqlite> ATTACH DATABASE '/path/to/sqlite/test.db' AS 'test''
sqlite> .database
seq name  file
--- ----------- ------------------
0 main /path/to/sqlite/main.db
2 test /path/to/sqlite/test.db
Jak nie używać
Zastrzeżone aliasy: MAIN i TEMP
$ sqlite3 /path/to/sqlite/main.db
sqlite> ATTACH DATABASE '/path/to/sqlite/test.db' AS 'main'
Error: database main is already in use
sqlite> ATTACH DATABASE '/path/to/sqlite/test.db' AS 'temp'
Error: database temp is already in use
Przykładowe zapytania
$ sqlite3 /path/to/sqlite/main.db
sqlite> ATTACH DATABASE '/path/to/sqlite/test.db' AS 'test'
sqlite> SELECT * FROM main.table1
sqlite> SELECT * FROM test.table1
sqlite> SELECT tt1.*, mt1.* FROM test.table1 tt1, main.table1 mt1
CQRS

CQRS (Command Query Responsibility Segregation) polega na modyfikacji typowej n-warstwowej aplikacji w taki sposób, że - upraszczając - część systemu przetwarzająca i utrwalająca dane a część odpowiedzialna za pobieranie danych to odrębne, rozdzielne podsystemy.

Przetwarzanie odbywa się na podstawie poleceń (commands) które wykonuje warstwa przetwarzająca, a dostęp do danych następuje przez zapytania (queries).

Mają tu zastosowanie kolejki, eventy i inne mechanizmy zapewniające właściwy sposób komunikacji pomiędzy podsystemami.
Koncepcja CQRS
Komenda
(command)
Zapytanie
(query)
Model domeny
Model odczytu
UI
Ewentualna informacja o błędzie
Komendy (commands)
Przetwarzają transakcje, zmieniają dane
Zapytania
Odycztują dane, read only
Plusy
Minusy
Rozdzielenie operacji zapisu i odczytu, możliwość ich optymalizacji
Budowa skalowalnych aplikacji
Dodatkowy nakład pracy
Nowe dane mogą być dostępne dopiero po jakimś czasie
Nagrania z prelekcji o CQRS
Full transcript