#nosql #cassandra
#nosql #cassandra
Вопрос:
В моем пространстве ключей
posts = [
#key
'post1': {
# columns and value
'url': 'foobar.com/post1',
'body': 'Currently has client support FOOBAR for the following programming languages..',
},
'post2': {
'url': 'foobar.com/post2',
'body': 'The table with the following table FOOBAR structure...',
},
# ... ,
}
Как создать подобный запрос в Cassandra, чтобы получать все записи, содержащие слово ‘FOOBAR’?
В SQL есть SELECT * FROM POST WHERE BODY LIKE '%FOOBAR%'
, но в Cassandra?
Комментарии:
1. ПОДОБНЫЙ запрос в Cassandra пока не поддерживается.
Ответ №1:
Единственный способ сделать это эффективно — использовать полнотекстовую поисковую систему типа https://github.com/tjake/Solandra (Solr-on-cassandra). Конечно, вы можете создать свой собственный, используя те же методы вручную, но обычно это не требуется.
Обратите внимание, что это верно и для баз данных SQL: они переведут %FOO% в сканирование таблицы, если вы не используете расширение FTS, подобное tsearch2 в postgresql.
Комментарии:
1. Если ваш кластер Cassandra достаточно большой, сканирование таблиц может быть достаточно быстрым, поскольку каждому узлу требуется сканировать только часть данных. Я не уверен, есть ли способ сделать это изначально.
Ответ №2:
Вы могли бы создать другое семейство столбцов, где ключами являются домены, а значениями — ключи в вашем исходном семействе столбцов. Таким образом, вы могли бы напрямую ссылаться на записи в определенном домене.
Комментарии:
1. Ну, для меня создать другое семейство столбцов — это очень сложно. Я думаю, что cassandra необходимо улучшить эту проблему. В MongoDB это очень просто.
Ответ №3:
В Cassandra 3.4 добавлена поддержка LIKE в CSQL. Итак, наконец-то он доступен изначально.