Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Базы данных - лекция9 - Cassandra (семейство колонок)

Anton
November 06, 2018

Базы данных - лекция9 - Cassandra (семейство колонок)

Anton

November 06, 2018
Tweet

More Decks by Anton

Other Decks in Education

Transcript

  1. Запись Классика • Запись == перезапись Кассандра • Запись ==

    добавление с более новой меткой времени
  2. Масштабирование • Множество узлов • Все узлы равноправны как для

    чтения, так и для записи • Информация распределена между узлами
  3. Последствия • Операции чтения дороже операций записи • Рекомендуется проектировать

    модель данных, отталкиваясь от запросов (большие таблицы, дублирование данных, запросы без JOIN)
  4. Установка: 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
  5. Установка: Windows • Сборки DataStax Distribution of Apache Cassandra (больше

    не поддерживают) academy.datastax.com/planet-cassandra/cassandra
  6. Запуск: сервер • 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..
  7. Запуск: неправильно • 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
  8. Добавляем значения 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, 'Родион', 'Раскольников');
  9. SELECT * FROM users; user_id | fname | lname ---------+-------+-------

    1744 | Олег | Газманов 1745 | Родион | Газманов 1746 | Родион | Раскольников
  10. Поиск по колонке • 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"
  11. SELECT * FROM users WHERE fname = 'Родион'; user_id |

    fname | lname ---------+-------+------- 1745 | Родион | Газманов 1746 | Родион | Раскольников
  12. 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 этот ок
  13. 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); } });