Share
Embed
Transcript
26 slides
-
Запись Классика • Запись == перезапись Кассандра • Запись ==
добавление с более новой меткой времени -
Масштабирование • Множество узлов • Все узлы равноправны как для
чтения, так и для записи • Информация распределена между узлами -
Последствия • Операции чтения дороже операций записи • Рекомендуется проектировать
модель данных, отталкиваясь от запросов (большие таблицы, дублирование данных, запросы без JOIN) -
Установка: Linux (Debian/Ubuntu) cassandra.apache.org • cassandra.apache.org/download/ • Добавить репозиторий deb
http://www.apache.org/dist/cassandra/debian 311x main ] echo "deb http://www.apache.org/dist/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list • Импортировать ключи https://www.apache.org/dist/cassandra/KEYS ] curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add - • Установить пакет cassandra ] sudo apt-get update ] sudo apt-get install cassandra -
Установка: Windows • Сборки DataStax Distribution of Apache Cassandra (больше
не поддерживают) academy.datastax.com/planet-cassandra/cassandra -
Запуск: сервер • sudo -u cassandra /usr/sbin/cassandra -f INFO 13:35:13
Starting listening for CQL clients on localhost/127.0.0.1:9042... INFO 13:35:13 Binding thrift service to localhost/127.0.0.1:9160 INFO 13:35:13 Listening for thrift clients.. -
Запуск: неправильно • cassandra -f WARN 13:29:45 JMX is not
enabled to receive remote connections. Please see cassandra-env.sh for more info. ERROR 13:29:45 Directory /var/lib/cassandra/data doesn't exist ERROR 13:29:45 Has no permission to create /var/lib/cassandra/data directory -
Создаем пространство ключей (база данных) CREATE KEYSPACE studkeyspace WITH REPLICATION
= { 'class' : 'SimpleStrategy', 'replication_factor' : 1 }; USE studkeyspace; -
Создаём семейство колонок (таблица) CREATE TABLE users ( user_id int
PRIMARY KEY, fname text, lname text ); -
Добавляем значения INSERT INTO users (user_id, fname, lname) VALUES (1744,
'Олег', 'Газманов'); INSERT INTO users (user_id, fname, lname) VALUES (1745, 'Родион', 'Газманов'); INSERT INTO users (user_id, fname, lname) VALUES (1746, 'Родион', 'Раскольников'); -
SELECT * FROM users; user_id | fname | lname ---------+-------+-------
1744 | Олег | Газманов 1745 | Родион | Газманов 1746 | Родион | Раскольников -
Поиск по колонке • SELECT * FROM users WHERE fname
= 'Родион'; InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING" -
Чтобы делать поиск по колонке, нужно сначала сделать для нее
индекс CREATE INDEX ON users (fname); -
SELECT * FROM users WHERE fname = 'Родион'; user_id |
fname | lname ---------+-------+------- 1745 | Родион | Газманов 1746 | Родион | Раскольников -
Node.js cassandra api • [x] npm install node-cassandra-cql www.npmjs.com/package/node-cassandra-cql этот
вариант не работает — валится при подключении • [v] npm install cassandra-driver academy.datastax.com/resources/getting-started- apache-cassandra-and-nodejs этот ок -
node-cassandra.js var cassandra = require('cassandra-driver'); //Connect to the cluster var
client = new cassandra.Client({contactPoints: ['127.0.0.1'], keyspace: 'studkeyspace'}); client.execute("SELECT fname, lname FROM users WHERE fname='Родион'", function (err, result) { if (!err){ if (result.rows.length > 0 ) { var user = result.rows[0]; console.log('got user profile: ' + user.fname + ' ' + user.lname); } else { console.log("No results"); } } else { console.log(err); } }); -
Лаба 5 • Перевести лабу 4.2 (динамический фильтр таблицы) на
бэкэнд с хранением данных в Cassandra