|
SQLite и Tokyo Cabinet
|
|||
---|---|---|---|
#18+
Интересуюсь встраиваемыми БД SQLite и Tokyo Cabinet. И по ходу возникли вопросы: 1) Действительно ли при использовании этих решений, масштабирование бд не возможно ??? 2) Так как Tokyo Cabinet не использует SQL, по факту она получается шустрее??? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2009, 19:48 |
|
SQLite и Tokyo Cabinet
|
|||
---|---|---|---|
#18+
Просто Tokyo Cabinet на Винде не завести, да и Си я пока еще не знаю - трудно сравнивать. Хочется услышать мнение гуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2009, 19:52 |
|
SQLite и Tokyo Cabinet
|
|||
---|---|---|---|
#18+
Onsite1) Действительно ли при использовании этих решений, масштабирование бд не возможно ??? А что вы понимаете под масштабированием? Onsite2) Так как Tokyo Cabinet не использует SQL, по факту она получается шустрее??? Onsiteтрудно сравнивать Tokyo Cabinet (как подсказывает гугла) хранит пары "ключ-значение" и все. Нет таблиц, нет триггеров, нет встроенных функций. Ничего нет. Поэтому достать конкретное значение по ключу наверное будет быстрее чем в SQLite. А вот сделать на Tokyo Cabinet аналог select ... from .... join ... join... group by.... having... ;) Т.е. совершено разного плана продукты. Похожи между собой как яблоко и устрица. Оба годятся в пищу. Можно сравнивать вкусовые ощущения. Но вот сравнивать смысла особого нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2009, 13:04 |
|
SQLite и Tokyo Cabinet
|
|||
---|---|---|---|
#18+
Серж, Спасибо! авторА что вы понимаете под масштабированием? Масштабируемость - способность системы справляться с увеличивающимися нагрузками (обычно - путем наращивания аппаратных ресурсов) . Имеется ввиду горизонтальная/вертикальная масштабируемость. Тоесть, возможно придется распределить СУБД по разным физических серверам. Как в этом случае поступать? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2009, 13:52 |
|
SQLite и Tokyo Cabinet
|
|||
---|---|---|---|
#18+
авторТоесть, возможно придется распределить СУБД по разным физических серверам. Как в этом случае поступать? Тоже интересен этот вопрос. Например, если веб-проект высоко-посещаем и уже один сервак не справляется, что делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2009, 13:55 |
|
SQLite и Tokyo Cabinet
|
|||
---|---|---|---|
#18+
ICPМасштабируемость - способность системы справляться с увеличивающимися нагрузками (обычно - путем наращивания аппаратных ресурсов)Вот сами и ответили, что база данных лишь часть системы и что важна роль "железа". Это я к тому, что кажется есть непонимание масштабируемости и нет действительной необходимости в ней. Посчитайте сколько у вас данных будет. Создайте тестовую бд таких размеров, выполните интересующие запросы и все будет понятно. Onsiteи уже один сервак не справляется, что делать?В первую очередь ответить себе на вопрос "А почему он не справляется?". Может у вас до сервака канал "узкий" и нестабильный. Может сам http-сервер так сконфигурирован. Может у вас и не сервер, а хостинг и вам дается не более 5% процессорного времени. Может алгоритмы реализованные на php/perl/etc написаны так, что они тормозят. Может бд спроектирована так, что она в принципе ни на каком железе быстро работать не будет. Имхо, если задается вопрос о масштабируемости и sqlite, то либо неправильно выбрана субд, либо никаких масштабностей и не нужно. Сама идея sqlite такова, что для нее достаточно любой персоналки. http://www.sqlite.org/about.htmlThink of SQLite not as a replacement for Oracle but as a replacement for fopen() В тоже время MBG в соседней ветке говорит о работе гиговых баз. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2009, 16:04 |
|
SQLite и Tokyo Cabinet
|
|||
---|---|---|---|
#18+
Серж ... авторСама идея sqlite такова, что для нее достаточно любой персоналки. http://www.sqlite.org/about.htmlThink of SQLite not as a replacement for Oracle but as a replacement for fopen() Что-то совсем запутался. Читаю статьи на Хабре о создании высоко посещаемых сайтов. И большинство спецов, советуют использовать встраиваемые субд, как пример SQLite, Tokyo Cabinet, BerkeleyDB и т.д. Сразу возникают вопросы: 1) Как такие бд, без сетевого интерефеса обеспечивают одновременный доступ нескольких процессов??? Блокировка таблиц, по идее сильно же понизит скорость записи. В случае TokyoСabinet вроде все ясно, к ней прилагается сетевой интерфейс TokyoTyrant. А с остальными субд??? 2) Как раскидывают бд на несколько серверов, с целью увлечения скорости доступа к данным ??? Ведь тот же контакт из-за огромного количества запросов, и солидной бд - врядли потянет 1 сервер. Погуглил про Tokyo Cabinet, пишут что она как раз для большого объема данных - сотни гигабайт. Но проекты, которые ее используют не нашел. Подскажите, пожалуйста, где я ошибаюсь ???? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2009, 16:41 |
|
SQLite и Tokyo Cabinet
|
|||
---|---|---|---|
#18+
OnsiteПодскажите, пожалуйста, где я ошибаюсь ????Мне кажется в подходе к решению задачи :) Слишком глобальные теоретические вопросы. Ни я, ни кто другой не будет читать курс лекций по распределенным базам данным. Проще прочитать самому. И абстрактные "большие" бд, "высоко-посещаемый" веб ресурс... Это пустые слова. Цифры - средний размер записи, кол-во записей, кол-во запросов в секунду и т.п. - это факты. Приведя их можно дать условные названия "большой", "посещаемый". Высоко посещаемый - это, например, гугл. Большая бд - это например, Verizon, с более 5 TB. Тут (сейчас поисковиком нашел) приводится описание высоко посещаемых и больших. Там и цифирьки приводятся. Сравните с вашими реальными или гипотетическими. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2009, 17:53 |
|
SQLite и Tokyo Cabinet
|
|||
---|---|---|---|
#18+
Серж, авторМне кажется в подходе к решению задачи :) Наверно Вы правы. У меня задача не разработать проект, а академический интерес. Разобраться хочется как это все работает:) Вот про масштабирование реляционных бд статьи есть, и понятно как это организовывается. А вот про TokyoCabinet упоминается, что масштабирование возможно. Но как этот вопрос решается в субд такого типа, не понятно. Это задача самой БД организовать хранилище на нескольких серверах (нужно больше, просто подключаешь еще сервак), или головная боль программистов раскидать информацию по узлам (серверам)??? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2009, 18:49 |
|
SQLite и Tokyo Cabinet
|
|||
---|---|---|---|
#18+
Серж В тоже время MBG в соседней ветке говорит о работе гиговых баз. Сколько-то лет назад мы делали систему анализа, в которой объем данных составляет десятки гигабайт. Притом одна выборка "поднимает" до 10-ти гигабайт исходных данных. Но пользователей мало, так что один запрос может выполняться минуту-две. Сначала использовали постгрес, но он не может обрабатывать выборки, многократно превышающие доступный объем ОЗУ, так что перешли на эскулайт; в качестве бонуса получили систему, не требующую никакого обслуживания (ОС debian etch). Даже не помню, какая там версия SQLite стоит, год или два не обновляли за ненадобностью, хотя известно, что новые версии в разы быстрее. Лучше всего смотреть тесты. Вот, например, сравнение постгреса с эскулайт: Тестирование SQLite 3.6.17-mobigroup.2 на больших таблицах Есть еще несколько тестов, которые стоило бы опубликовать, но очень уж мне лениво повторять это в постгресе (оно там жутко тормозит и на практике бесполезно), возможно, что просто приведу результаты для эскулайт и подскажу, как желающие могут это повторить в постгресе. Что касается размера эскулайтовских баз, лично я тестировал _таблицы_ размером до 100 Гб (100 миллионов записей по 1 Кб каждая). На практике же использую базы не более нескольких гигабайт размером - для предотвращения блокировок лучше создать сто баз по 1 Гб, нежели одну базу на 100 Гб. На сервере с коре квадро процессором в секунду возможно выполнение многих тысяч подключений к БД с десятками несложных запросов в каждом подключении. И вряд ли стоит думать о масштабировании, поскольку такой производительности с лихвой хватает для обеспечения работы тысяч одновременных сессий. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2009, 20:31 |
|
SQLite и Tokyo Cabinet
|
|||
---|---|---|---|
#18+
MBG, Спасибо за инфу. Ценно!!! авторНа сервере с коре квадро процессором в секунду возможно выполнение многих тысяч подключений к БД с десятками несложных запросов в каждом подключении. И вряд ли стоит думать о масштабировании, поскольку такой производительности с лихвой хватает для обеспечения работы тысяч одновременных сессий. Мне просто для себя интересно, масштабирование возможно ли на встраиваемых БД и как оно осуществляется. ) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2009, 22:16 |
|
SQLite и Tokyo Cabinet
|
|||
---|---|---|---|
#18+
OnsiteМне просто для себя интересно, масштабирование возможно ли на встраиваемых БД и как оно осуществляется. ) Если увеличить мощность железяки, поставить на ОС с более эффективной файловой системой, и с С рантаймом с более эффективными процедурами, апгрейдить на ту или иную версию SQLite, то можно увеличить производительность. Увеличение кол-ва потоков, каждый использующий соединение с одной и той же БД и пишущий в нее с увеличением кол-ва процессоров, наврядли даст линейный рост производительности. Короче, надо смотреть на задачу и думать как подвести масштабируемость всей системы, а не только SQLite, под эту задачу ... Примерно так ... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2009, 09:28 |
|
SQLite и Tokyo Cabinet
|
|||
---|---|---|---|
#18+
OnsiteМне просто для себя интересно, масштабирование возможно ли на встраиваемых БД и как оно осуществляется. ) Зависит от типа нагрузки. Если в основном происходят операции чтения, то масштабируется увеличением кол-ва процессоров и т.п. Можно и реплицировать базу на другой хост средствами файловых систем. С записью сложнее. Если операции записи допускают буфферизацию, например, коллекторы данных, то задача решается легко - настройкой интервала синхронизации баз коллекторов с основной. Когда же программная буфферизация невозможна, на помощь придут аппаратные рэйд-массивы со встроенным буфером и батарейкой, безопасно буферизующие операции доступа к БД. Есть еще расширение для SQLite, выполняющее операции модификации БД в фоновом потоке, но я сам не пробовал. Судя по багтрекеру, возможные ошибки в этом модуле уже нашли и исправили, так что можно пользоваться. См. расширение async в апстриме. Также можно работать в режиме shared cache, но тут есть риск повредить базу при ошибках в работе с потоками приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2009, 14:07 |
|
SQLite и Tokyo Cabinet
|
|||
---|---|---|---|
#18+
Вот выложил результаты тестов, исходя из которых я принимаю решение о разделении баз данных на части. Degradation of indexing speed В зависимости от доступной памяти на сервере можно получить критический размер базы, когда индексы начинают сильно "тормозить". Для 32-бит ОС и композитных индексов разумным пределом будут таблицы в 4 Гб. Полагая срок хранения данных 3 года, dataset может содержать 36 баз размером 144 Гб в сумме - при условии, что каждая БД содержит одну большую таблицу. Если этого окажется мало, можно разделить данные по неделям, что позволит управлять набором данных объемом 576 Гб. Если разделить по дням, то и 4 Тб будут обрабатываться эффективно. Разделенные таблицы можно хранить в одной БД или в разных по потребности. Замечу, что работа с большими индексами и в других СУБД может требовать много времени, так что выбранный мною предел в 5000 секунд может быть увеличен в десятки раз, что позволит работать с огромными базами, но модификация будет выполняться в фоновом режиме. Например, если рассмотренный выше dataset разделять по часам, а по истечению суток в фоновом режиме объединять базы за каждые 24 часа в одну за сутки, можно будет работать с набором данных в десятки терабайт размером. При таких масштабах может оказаться необходимым разделить базы по хостам, благо для выборок эскулайт позволяет подключать (командой attach) удаленные базы (примонтировав удаленную ФС). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2009, 20:48 |
|
|
start [/forum/topic.php?fid=54&msg=36323981&tid=2009408]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
66ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 180ms |
0 / 0 |