Прежде, чем продолжать знакомство с Apache Cassandra – давайте посмотрим – какие каталоги и файлы идут “в комплекте”.
Так как при установке deb
-пакетом они разбросаны по системе – установим скомпилированную версию.
Со страницы загрузок выбираем зеркало и загружаем файл:
$ wget http://apache.cp.if.ua/cassandra/2.0.14/apache-cassandra-2.0.14-bin.tar.gz
Распаковываем:
$ tar xfp apache-cassandra-2.0.14-bin.tar.gz
Структура каталогов Apache Cassadnra выглядит так:
$ tree -d -L 1 apache-cassandra-2.0.14 apache-cassandra-2.0.14 ├── bin ├── conf ├── interface ├── javadoc ├── lib ├── pylib └── tools
bin
– содержит исполняемые файлы для управления сервером Cassandra, клиент интерфейса командной строки (CLI), различные утилиты (такие какnodetool
для управления нодами кластера); при установке из репозитория – большая часть этих утилит (cqlsh
,nodetool
) находятся в/usr/bin/
, аcassandra
– в/usr/sbin/
;conf
– файлы конфигурации Cassandra:cassandra.yaml
– основной файл конфигурации сервера,storage-conf.xml
отвечает за создание и настройку хранилища данных, файлы настройки авторизации, файл настроекlog4j
для управления логами; при установке из репозитория – они обычно расположены в/etc/cassandra/
;interface
– содержит один файлcassandra.thrift
, который предоставляет API для клиентов, описанный с помощью Thrift;javadoc
– документация, созданная с помощью JavaDoc; включает в себя только содержимое комментариев из Java-кода, и не является полноценной документацией по Cassandra;lib
– содержит внешние библиотеки, необходимые для работы Cassandra;pylib
– Python-драйвер для Cassandra; может быть установлен отсюда, либо из PIP (pip install cassandra-driver
);tools
– некоторые утилиты, например –cassandra-stress
для нагрузочного тестирования; при установке из репозитория – находятся в каталоге/usr/bin/
.
При установке скомпилированной версии – перед запуском создайте и установите владельца для каталогов:
# mkdir /var/log/cassandra/ # mkdir /var/lib/cassandra/ # chown -R setevoy:setevoy /var/log/cassandra/ # chown -R setevoy:setevoy /var/lib/cassandra/
Замените setevoy
на пользователя, от имени которого будет запускаться Cassandra.
Теперь можно запускать сервер:
$ cd apache-cassandra-2.0.14/ $ ./bin/cassandra -f
Cassandra CLI и cqlsh
Для управления сервером и нодами можно использовать имеющуюся утилиту командной строки cassandra-cli
(которая использует упомянутый выше Thrift-сервер):
$ ./bin/cassandra-cli Connected to: "Test Cluster" on 127.0.0.1/9160 Welcome to Cassandra CLI version 2.0.14
Но она уже считается устаревшей:
The CLI is deprecated and will be removed in Cassandra 3.0
И поэтому используем утилиту cqlsh
:
$ ./bin/cqlsh Connected to Test Cluster at localhost:9160. [cqlsh 4.1.1 | Cassandra 2.0.14 | CQL spec 3.1.1 | Thrift protocol 19.39.0] Use HELP for help. cqlsh>
Cassandra используется язык запросов CQL (Cassandra Query Language).
Подсказка по командам
cqlsh> ? Documented shell commands: =========================== CAPTURE COPY DESCRIBE EXPAND SHOW TRACING CONSISTENCY DESC EXIT HELP SOURCE CQL help topics: ================ ALTER CREATE_TABLE_OPTIONS SELECT ... CREATE_KEYSPACE PERMISSIONS CREATE_TABLE REVOKE
Для получения подсказки по конкретной команде:
cqlsh> HELP SHOW SHOW [cqlsh only] Displays information about the current cqlsh session. Can be called in the following ways: ... SHOW SESSION <sessionid> Pretty-prints the requested tracing session.
После установки Cassandra имеет только два пространства ключей (keyspace), которые можно посмотреть так:
cqlsh> describe keyspaces; system system_traces
Они являются аналогами баз mysql
и performance_shema
в MySQL и не предназначены для работы пользователя.
Получить информацию по самому кластеру, к которому вы подключены, можно так:
cqlsh> describe cluster; Cluster: Test Cluster Partitioner: Murmur3Partitioner Snitch: SimpleSnitch
Больше про команду DESCRIBE
можно почитать тут>>>,
Пространство ключей (keyspace) – что-то схожее с базой данных в реляционных базах данных, которая содержит описание одной или нескольких семейств колонок (column family), которые, грубо говоря, являются аналогами таблиц в базах типа MySQL.
Для создания нового keyspace
– используется команда CREATE KEYSPACE:
cqlsh> CREATE KEYSPACE TestKeyspace WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
Классы репликации мы рассмотрим позже.
Переключаемся на работу с новым keyspace
:
cqlsh> USE TestKeyspace; cqlsh:testkeyspace>
Если выполнить DESCRIBE KEYSPACES
(можно сократить до DESC KEYSPACES
) – среди системных баз появится и наша:
cqlsh:testkeyspace> DESCRIBE KEYSPACES; system testkeyspace system_traces
Для получения более полной информации – укажите имя keyspace
:
cqlsh:testkeyspace> describe keyspace testkeyspace; CREATE KEYSPACE testkeyspace WITH replication = { 'class': 'SimpleStrategy', 'replication_factor': '1' };
Для создания таблицы (column family) в новой базе – используется команда CREATE TABLE
:
cqlsh:testkeyspace> CREATE TABLE users ( ... firstname text, ... lastname text, ... age int, ... email text, ... city text, ... PRIMARY KEY (lastname));
Если вызвать desc keyspace testkeyspace
ещё раз – мы увидим новую таблицу:
cqlsh:testkeyspace> desc keyspace testkeyspace; CREATE KEYSPACE testkeyspace WITH replication = { 'class': 'SimpleStrategy', 'replication_factor': '1' }; USE testkeyspace; CREATE TABLE users ( lastname text, age int, city text, email text, firstname text, PRIMARY KEY ((lastname)) ) WITH bloom_filter_fp_chance=0.010000 AND caching='KEYS_ONLY' AND comment='' AND dclocal_read_repair_chance=0.100000 AND gc_grace_seconds=864000 AND index_interval=128 AND read_repair_chance=0.000000 AND replicate_on_write='true' AND populate_io_cache_on_flush='false' AND default_time_to_live=0 AND speculative_retry='99.0PERCENTILE' AND memtable_flush_period_in_ms=0 AND compaction={'class': 'SizeTieredCompactionStrategy'} AND compression={'sstable_compression': 'LZ4Compressor'};
Для изменения таблиц – используется ALTER TABLE
. Например – что бы удалить колонку firstname
:
cqlsh:testkeyspace> ALTER TABLE users DROP firstname;
cqlsh:testkeyspace> describe keyspace testkeyspace; ... CREATE TABLE users ( lastname text, age int, city text, email text, PRIMARY KEY ((lastname)) ) ...
А что бы удалить всю таблицу – DROP TABLE
:
cqlsh:testkeyspace> DROP TABLE users;
Создадим новую таблицу:
cqlsh:testkeyspace> CREATE TABLE users (id int, name text, login text, group text, PRIMARY KEY ((id)));
Добавление данных выполняется помощью INSERT
:
cqlsh:testkeyspace> INSERT INTO users (id, name, login, group) VALUES (1, 'User', 'setevoy', 'wheel');
Проверяем:
cqlsh:testkeyspace> SELECT * FROM users; id | group | login | name ----+-------+---------+------ 1 | wheel | setevoy | User (1 rows)
Или с помощью WHERE
:
cqlsh:testkeyspace> SELECT * FROM users WHERE id=1; id | group | login | name ----+-------+---------+------ 1 | wheel | setevoy | User (1 rows)
Изменить запись можно с помощью UPDATE
, указав PRIMARY KEY
записи:
cqlsh:testkeyspace> UPDATE users SET group='nobody' where id=1;
Результат:
cqlsh:testkeyspace> SELECT * FROM users WHERE id=1; id | group | login | name ----+--------+---------+------ 1 | nobody | setevoy | User (1 rows)
Использование поля, не являющего первичным ключом, вызовет ошибку:
cqlsh:testkeyspace> UPDATE users SET group='nobody' where login='setevoy'; Bad Request: Non PRIMARY KEY login found in where clause
Удалить запись можно с помощью DELETE
, так же указав PRIMARY KEY
:
cqlsh:testkeyspace> DELETE FROM users where id=1; cqlsh:testkeyspace> SELECT * FROM users WHERE id=1; (0 rows)