На данной странице собраны факты в следствии работы с двумя бд.
Следующую информацию нельзя ассоциировать с плюсами или минусам, но о ней нужно знать.
| Tarantool | Couchbase | |
Подход создания индекса | Общепринятый подход создания индексов | Чтобы создать индекс, нужно сначала создать DesignDoc, и уже в нем создать view (индекс) |
| Логика индекса | Тупые индексы | Индексы тут создаются на основании логики описанной вами и несут не просто перечисляемую функцию, но и некоторую смысловую. Например в индекс можно включить пользователей у которых длинна email больше n символов, или присутствуют только определенные поля. |
| Подход обновления индекса | Обновление индекса автоматически при внесении изменений в бд | Обновление индекса происходит либо по требованию (при запросе на получение данных), либо автоматически, когда фрагментация базы данных достигает определенного процента (заданного в настройках Bucket). Этот момент тоже нужно учитывать при разработке. Допустим у нас есть необходимость проверить на уникальность имени пользователя перед выполнением какой либо операции. Например при регистрации пользователя. Естественно мы выполним запрос к этому view и будем анализировать ответ базы данных. Однако существует вероятность того, что в этот же самый момент только что зарегистрировался пользователь с таким же именем, а индекс еще не успел перестроиться. Естественно нам придет информация что в индексе такой записи нет и мы получим некоторую коллизию. Дабы избежать такой ситуации, есть возможность, при вызове view индекса, указать ему необходимость перестроения индекса. Т.е. все операции, которые не были выполнены по данному индексу, сначала будут завершены, а после чего уже будет выполнен запрос и возвращен результат. |
| Индекс на 1 поле | да | да |
| Индекс составной / composite | да | да |
| Индекс покрывающий / covering | да | |
| Индекс уникальный / unique | да | нет, и unique constraint тоже нет, но есть решения: 1. сохранять уникальное значение в PK отдельную таблицу (PK уникальный) 2. др |
| Выборка некоторых полей, например SELECT name FROM t | да | |
| Выборка по условиям, например SELECT * FROM t WHERE id IN (1,2) | да | |
| joins таблиц | да | да |
| subqueries | да | |
| Строгая типизация данных | да | |
| nullable значения | да | |
SQL-группировка с функциями агрегации: SELECT column2, SUM(column4), COUNT(column4), AVG(column4) | да | да |
| Отличный туллинг | да | да |
| Датамаппер на PHP (сущности) | да | |
| Отличная документация | да | да |
| Отличная поддержка в комьюнити | да | |
| Весь выше перечисленный функционал работает при хранении данных в памяти | да |
Понять мощь Тарантула помогут 2 статьи:
https://www.tarantool.io/ru/doc/latest/tutorials/sql_tutorial/
https://www.tarantool.io/ru/doc/2.3/reference/reference_sql/sql/
Источник: 1
Комментарии
Комментариев пока нет.