memSQL i MariaDB w Django

memSQL

memSQL to nowa baza danych oferująca wysoką wydajność dzięki wykorzystaniu pamięci RAM jako głównego składowiska danych jak i kompilacji zapytań (FAQ). Nie jest powiązana z MySQL, ale oferuje interfejs zgody z tą bazą danych co ułatwia jej wykorzystanie, czy szybkie przetestowanie.

Pobieramy paczkę z bazą danych (trzeba podać adres email, po czym otrzymamy dostęp do naszej kopii memSQL). Wykonujemy podane instrukcje - pobieramy i rozpakowujemy archiwum. Następnie możemy sprawdzić wymagania systemowe:

./check_system
Jeżeli nie ma poważnych problemów to uruchamiamy serwer:
./memsqld --port 3307

Serwer działa na porcie 3307. MySQL domyślnie działa na porcie 3306. By połączyć się z serwerem memSQL wystarczy:

mysql -u root -h 127.0.0.1 -P 3307 --prompt="memsql> "
Możemy stworzyć nową bazę danych - "CREATE DATABASE test;".

memSQL i Django

Django nie posiada backendu dla memSQL. Można wykorzystać backend MySQL, ale nie będzie to rozwiązanie w pełni sprawne. Konfiguracja bazy danych w settings.py wygląda następująco:

DEBUG = False
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '3307',
    }
}

DEBUG trzeba wyłączyć by "warningi" zwracane przez serwer nie generowały wyjątków (a napotkamy np. "Feature 'REFERENCES' is not supported by MemSQL. Execution will continue, but the feature will be ignored."). Pozostała część jest standardowa. Zmieniamy port i host tak by projekt Django łączył się z memSQL a nie MySQL.

Jeżeli na komputerze mamy MySQL 5.0.3 lub nowsze i nowszą wersję Django (np. 1.4) to framework będzie używał w transakcjach operatora "SAVEPOINT", który nie jest obsługiwany przez memSQL (co da wyjątek "Feature 'SAVEPOINT' is not supported by MemSQL"). Edytujemy kod Django - django/db/backends/mysql/base.py i szukamy:

self.features.uses_savepoints =                 self.get_server_version() >= (5, 0, 3)
Ustawiamy na sztywno False:
self.features.uses_savepoints = False
Teraz syncdb, czy także ładowanie danych z fixtures powinno przejść bez problemów. Testując memSQL na aplikacjach mojej strony (artykuły i forum) wszystko wydaje się działać bez problemów (choć osiągów nie sprawdzałem).

memSQL może być dla niektórych aplikacji bardzo korzystnym rozwiązaniem. Dla wdrożeń produkcyjnych potrzebny byłby jednak dedykowany backend.

MariaDB

MariaDB to fork MySQL, binarnie zgodny z tą bazą danych. W odróżnieniu od "rodzica" MariaDB zawiera dodatkowe silniki do przechowywania danych i liczne dodatki - opisane w dokumentacji. W przypadku tego serwera baz danych nie powinno być problemów ze stosowaniem backendu MySQL w Django do jego obsługi.

RkBlog

Django, 30 June 2012

Comment article
Comment article RkBlog main page Search RSS Contact