Как стать автором
Обновить

Комментарии 21

А почему вы HBase называете NoSQL? Во-первых, авторы ее так не называют (они ее зовут просто не реляционной), а во-вторых, есть же Phoenix, который дает вполне себе SQL доступ к HBase?
Не задумывался как-то об этом, так как все вокруг у нас HBase так зовут, википедия тоже так считает, хотя, да, вы правы — сейчас посмотрел, авторы действительно не называют ее NoSQL.
С Phoenix пока не доводилось работать. Но как я и писал, из той же Impala вполне себе можно тоже писать SQL-запросы к HBase
Википедия как раз так не считает, по крайней мере английская: en.wikipedia.org/wiki/Apache_HBase — и попробуйте тут найти эту аббревиатуру :)

>HBase is an open-source non-relational distributed database modeled after Google's Bigtable and written in Java.

Почему в русском взяли и перевели non-relational как noSQL — мне лично невдомек. Согласитесь, что модель базы и язык для доступа к ней — это все-таки разные вещи. Особенно с учетом наличия финикса (потому что SQL-то как раз есть). Вот одна из первых реляционных баз от IBM была с языком QBE — и что, она от этого стала не реляционной разве?

Ну то есть, не то чтобы это было принципиально, а просто почему не называть как у авторов?
Хм… Действительно…
Надо перечитать первоисточник.
Не хочу сраться, но если прожать ссылку non-relational в приведенной же статье — будете удивлены
Ну, я не готов отстаивать эту позицию, это не настолько серьезно, но мне это странно. Потому что мне кажется — это разные вещи. Ну и тупо — как можно называть СУБД noSQL, если для нее просто есть вполне работающий и адекватный SQL движок?
Ну, SQL движки есть и для более странных вещей — это же не дает нам права все их называть SQL базами данных?
>Ну, SQL движки есть и для более странных вещей
Например?

И какой тогда смысл вообще у термина noSQL, если даже отсутствие SQL для этой БД он не означает? Вот что такое не реляционная — я могу понять, это например графовая (и это название осмысленное). Или документо-ориентированная. Или key-value например. Это все термины, которые что-то говорят.
И какой тогда смысл вообще у термина noSQL, если даже отсутствие SQL для этой БД он не означает?

NoSQL — это Not Only SQL

Ну, не знаю, какой-нить SQL для выборки писем из почтовых баз.

Признаться, как человек, который никогда в глаза не видел NoSql, но много слышал, а до сих пор живёт в мире SQL выглядит интересно, ещё бы сравнение с обычным SQL.

В реальной жизни, ИМХО, возникновения практической потребности такого сравнения маловероятно, так как если оно возникнет, значит задача может быть решена на реляционных БД. А значит NoSQL лучше вообще не использовать.
С «академической» же точки зрения… Полагаю, что организовать релевантный эксперимент будет очень непросто из-за сильных различий как в алгоритмах, так и в используемом инструментарии

"эффективный поиск, не приводящий к full table scan, возможен исключительно по ключу" — это не в случае с hbase, а в любом случае. Особенно в случае rdb


Любая мутация по "друзьям" будет минимум 2О(n), так как необходимо у каждой пары провести изменения.
И это без учета операций на перестройку индексов и т.д.


" так как теперь нам не надо вычитывать всю строку и перебирать ее колонки" — а проверки на уже существующего друга?


В итоге получаем не революцию или эволюцию, а реанимацию какого нибудь foxpro или упаси Господь Lotus Notes. Все попытки перейти на ordb как то не очень увенчались успехом.

Ну, разве Foxpro когда-то работал с терабайтами? Революции тут конечно никакой нет, но как продукт оно вполне себе успешное. Даже не просто терабайты, а терабайты в сутки более-менее получается переваривать.

Вся прелесть HBase скорее в этом. Немного… на ручном управлении, но работает. В смысле, понастраивать придется, особенно если в данных есть какие-то перекосы, то распределять их по регионам равномерно — то еще занятие.

Любая мутация по "друзьям" будет минимум 2О(n), так как необходимо у каждой пары провести изменения.

Если мы храним "обратный" список, то да.


..." так как теперь нам не надо вычитывать всю строку и перебирать ее колонки" — а проверки на уже существующего друга?

Это утверждение для "Изменение данных: добавление друга". Для проверки уже существующих друзей перебор остается, о чем указано абзацем выше в "Чтение данных"

Коллеги, которые слушали ту лекцию, передают привет и рады, что тема получила продолжение :)

mongodb 1 документ per user
{userId: 1, friends: [3,5,8,4,2,1]}
поиск по id документа моментальный, перебор массива еще более моментальный даже если он размером 32 мб.

Перебор массива нихрена не моментальный. Особенно если вам придется сделать что-то такое, что не ложится в эту схему — например найти всех, у кого в друзьях X — вы быстро заметите, что он не такой быстрый, как хочется.

У friends же доступ к элементу поди O(n), и если мы хотим найти там X, то нам бы хотелось снизить этот порядок например до логарифма (и хранить хешмап). И да, в HBase зачастую грузят в качестве значения просто сериализованный Avro, например, где внутри есть и массивы, и много чего еще.
С учетом вычислительной мощности конкретного ноутбука экспериментально был выбран запуск для n = 10, 30, …. 170

оценивать алгоритмическую сложность на БД с неполными двумя сотнями записей? вы это серьёзно?

В целом замечание резонное.
При n = 10, 30, …. 200 общее время теста доходило уже до 30-35 минут, что для меня было уже чересчур (учитывая, что финальные тесты я запускал ни раз, и еще бесчисленное число раз при отладке). Мне важно было подтверждение или опровержение характера изменения времени. Уже n = 10, 30, …. 170 оказалось для этого достаточно как оказалось.

Уже n = 10, 30, …. 170 оказалось для этого достаточно как оказалось.

нет.
ваши выводы несколько гхм… наивные.


O(1) в реальной жизни не бывает (если не брать совсем уж тривиальные операции вроде «прочитать первую запись»), после какого-то объёма данных производительность падает.
если мы говорим про хэш-таблицы, то растёт число коллизий и/или приходится увеличивать размер хэша, таблицы перестают помещаться в кэше процессора, а потом и в оперативной памяти, etc.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации