Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Когда надо изобретать свой велосипед?
Строим NoSQL хранилище в приемлемые
сроки
Календарев Александр
Программист РБК-Медиа...
О чём доклад
-

о велосипедах
NoSQL
key/value хранилищах
это очень просто
Сделай сам

dev.it-portfolio.net

2
О велосипедах

dev.it-portfolio.net

3
О велосипедах

dev.it-portfolio.net

4
О велосипедах

dev.it-portfolio.net

5
О велосипедах
- Под конкретные условия местности свой
велосипед
- Велосипеды эволюционирует, как впрочем и
все на свете, в...
О велосипедах
- Под конкретные условия местности свой
велосипед
- Велосипеды эволюционирует, как впрочем и
все на свете, в...
О велосипедах
- Может получиться

dev.it-portfolio.net

8
О велосипедах
- Может получиться
- А может и нет

dev.it-portfolio.net

9
О велосипедах
- Может получиться
- А может и нет
- Это как повезет

dev.it-portfolio.net

10
О велосипедах
- Может получиться
- А может и нет
- Но в любом случае Вы
всегда останетесь в
плюсе:
- получите новый опыт и...
О чём доклад
-

о велосипедах
NoSQL
key/value хранилищах
это очень просто
Сделай сам

dev.it-portfolio.net

12
NoSQL
- Термин озвучен 1991 Carlo Strozzi
- Carlo Strozzi 1998 представил ”NoSQL
RDBMS, Copyright (C)”, язык запросов 4GL
...
-

Документно-ориентированные БД
Key/value хранилища
Поколоночные БД
Графовые БД

Подробнее

http://nosql-database.org/

d...
Документно-ориентированные
- Данные представлены в виде документов
- Форматы документы:
- XML: BerkeleyXML (XQuery), Sedna...
Key/value хранилища
Key-value хранилища запоминают и
извлекают документы по ключу.
Распределенные хеш-таблицы (DHT)
Пример...
Поколоночные БД
- Данные собраны в колонки и представляют
собой хеш таблицы.

dev.it-portfolio.net

17
Поколоночные БД
Преимущества:
- быстрая вставка,
- где документ представляем много колонок
- агрегирующие запросы в разы в...
Графовые БД
Данные в виде сетевой модели

Пример: Neo4, InfoGrid, GraphBase, DEX
dev.it-portfolio.net

19
NoSQL сравнение моделей хранения
key/value

RDBMS

документно-ориентированные

поколоночно-ориентированные

dev.it-portfol...
О чём доклад
-

о велосипедах
NoSQL
key/value хранилищах
это очень просто
Сделай сам

dev.it-portfolio.net

21
Key/Value Хранилище
- Index и Массива данных (bucket)
- Сетевой части
- Вспомогательных Tools :
- Конфигурация
- Репликаци...
Index + Bucket

dev.it-portfolio.net

23
Index
- Hash (хеш)
- Теоретически доступ/вставка за пост время: O(a)
- Поиск строго по ключу (операция равно).

- BTree (д...
Hash таблица
f = crc32(key) % n

Хеш-функция:
crc32/64, md5, Jenkins,
Murmur

Масив данных [bucket]
для хранения

dev.it-p...
Hash таблица

Так как объем Банк
данных конечный, то
возможна коллизия:
Sabdra Dee & John
Smeet

dev.it-portfolio.net

26
Hash
Хеш таблицу характеризуют
– Ёмкость bucket
– Разреженность массива
– Длинна элемента массива
f = key % n

коллизия
Ke...
О чём доклад
-

о велосипедах
NoSQL
key/value хранилищах
это очень просто , cделай сам

dev.it-portfolio.net

28
Что надо сделать?
- Понять требования
- Изучить существующие решения
- Найти подходящее API:
-

BerkeleyDb
dict, qhash,
To...
Что надо сделать?
-

Понять требования
Изучить существующие решения
Найти подходящее API
Сделать тесты
Выбрать сетевую мод...
Что надо сделать?
-

Понять требования
Изучить существующие решения
Найти подходящее API
Сделать тесты
Выбрать сетевую час...
О проекте
-

Служба знакомств
50 млн. анкет
25 млн. активных
25-90 тыс. сессий

dev.it-portfolio.net

32
О проекте (функциональная часть)
-

Просмотр и поиск анкет
Система сообщений
Голосовалки
Симпатии, Лайки
Сбор статистики
Г...
Что хотелось хранить?
-

Результаты голосований
Лайки
Информация о просмотрах (счетчики)
Геоданные

dev.it-portfolio.net

...
Лайки, голосовалки, просмотры
Counter: 1

Alice

Кто : 01

Bob: 01

dev.it-portfolio.net

35
Лайки, голосовалки, просмотры
Counter: 2

Alice

Кто : 01, 02

Bob: 01
Carol : 02

dev.it-portfolio.net

36
Лайки, голосовалки, просмотры
Counter: 3

Alice

Кто : 01, 02, 05

Bob: 01
Carol : 02
Carlos : 05
dev.it-portfolio.net

37
Что хотелось?
- Простую функциональность:
- get(key)
- set(key)
- increment ( key )
- Кандидаты:
redis – можно использоват...
Что хотелось?
- Простую функциональность;
get/set, Increment ( key1 , key2 )
- Персистентность
если упало, то данные не по...
Что хотелось?
- Простую функциональность
- Персистентность
- Что-то не сложное и быстрое
- не занимающее много места
- Mon...
Что хотелось?
-

Простую функциональность:
Персистентность
Что-то не сложное
Не memory-only
- вдруг не хватит места:
- red...
Протокол
- Разработать свой
Преимущества: учтены все особенности

- Взять существующий
Преимущества: не нужно разрабатыват...
Протокол взять существующий
- Бинарный: protobuf, msgpack, memcached-bin,
Apache-thrift, Apache-Avro, BSON,…
компактнее, б...
Протокол memcached
-

GET ˽ [key] rn
SET ˽ [key] ˽ [flag] ˽ [expire] ˽ [bytes] rn
INCR ˽ [key] ˽ [value] ˽ [NOREPLAY] rn
D...
Расширяем протокол
- Добавляем новые служебные команды:
- FLUSH ˽ 1rn
- SHOW INIrn
- STAT CLEAR rn

- Расширяем существующ...
Философия построения хранилища
- Используем понятие «Банк данных»
Банк данных – обособленный массив
данных, место для хран...
Принцип построения хранилища
Номер банка определен префиксом ключа
Key prefix
32 bit

``

key
32 bit
Банк 1

GET 1.23456

...
Принцип построения хранилища
Номер банка определен префиксом ключа
Несколько банков могут быть объединены в
одну физическу...
Типы банков
-

Бинарные данные
Символьные данные
Счетчики [4 байта]
«Индексные данные» на базе RB-tree
Индексные данные мо...
Реализация счетчика просмотров

Счетчики просмотров:
INCR ˽ 1.5 ˽ 1 rn
ключ анкеты = 5
SET˽ 1.5 ˽ 0 ˽ 0 ˽ 1 rn 0 rn
сброс
...
Реализация лайка
Alice
Bob:01

- Увеличение счетчика Алисы :
INCR ˽ 1.5 ˽ 1 rn
ключ Алисы = 5
- Добавляем в хеш Алисы ключ...
Реализация лайка
Alice
Bob:01

Однако если расширить протокол:
INCR ˽ 2.5.1/1 ˽ 1 rn
key

Вместо двух обращений – одно.
de...
Реализация лайка
- Вариант 1, как сортированный массив.
- Доступ за ln(n), n = 100 – 4 000 ( 7-14 шагов )
- Трудности с ал...
Расширяем протокол
Вводим понятие символьный вид #
Запомнили в символьном виде:
SET ˽ #1.5 ˽0˽0˽1rn1rn
GET ˽ #1.5 rn верне...
чистка мусора (garbage collector)
Удаленные профили
нужно удалять из хранилища
Требуется перебор всех данных
Делается, бло...
Проблемы
- Удаленные профили надо чистить
- Постоянно растет память, нужно
сбрасывать кеш, переоткрывать таблицы
- Вывод: ...
Мониторинг
- Команда stats
- Настраиваем rdd
- Рисуем графики

dev.it-portfolio.net

57
Мониторинг
- Память из /proc/self/mstat
- Производительность: кол-во запросов в сек
- Загрузка: отношение времени исполнен...
Мониторинг

dev.it-portfolio.net

59
Тестирование
API покрыли тестами Схх http://cxxtest.com
Тестирование производительности:
aналог Apache ab, протокол memcac...
Используемые Библиотеки
libev – сетевая однотредовая модель
libtokyocabinet – hashdb & treedb
tcmalloc - Memory pool alloc...
Рекомендуемые Библиотеки
Сетевые:
libevent2 http://libevent.org/
libev
http://software.schmorp.de/pkg/libev.html

Коротины...
Рекомендуемые Библиотеки
Хештаблицы:
Tokyo/Kyoto http://fallabs.com/ [cabinet]
libdict
https://github.com/fmela/libdic
str...
Рекомендуем почитать
Блог о высоких нагрузках
http://highloadblog.ru/
http://ru.wikipedia.org/wiki/Хеш-таблица
http://ru.w...
Вопросы
Q:

Open Source ?

A:

в полной версии нет, не вижу смысла
есть прототип, который можно заточить под
любые нужды в...
Upcoming SlideShare
Loading in …5
×

16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим NoSQL хранилище в приемлемые сроки", Александр Календарёв

2,126 views

Published on

16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Когда надо изобретать свой велосипед? Строим NoSQL хранилище в приемлемые сроки", Александр Календарёв (разработчик РБК-Медиа Холдинг / Love Planet)

Аннотация
- Что из себя представляет Современная служба знакомств (крупная соцсеть в миниатюре).
- Какие задачи мы решаем и немного про общую архитектуру проекта.
- Обзор про существующие key/value решения
- Почему не нас не устроили memcachedb, redis, tarantool или MongoDВ...
- Какие велосипеды пришлось изобретать и что взяли готовое.
- Протокол обмена, почему выбрали memcached
- Как и зачем расширять существующие протоколы
- Как устроено хранилище изнутри (на базе key/value Hash & Tree), немного скучной теории про структуры данных, полезно тем, кто все же рискнет написать что-то своё.
- какие key/value АПИ можно еще использовать.
- Проблемы здоровья хранилища или зачем и как делать Мониторинг.
- возможность масштабирования, проблемы и пути решения.

Биография
Опыт в IT индустрии 15 лет, кандидат наук. Докладчик на Hi++ 2011, ADDConf-2, DevConf 2012, PHPConf 2009 и других. Автор блога highloadblog.ru. Круг интересов: хранение и обработка данных.

  • Be the first to comment

  • Be the first to like this

16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим NoSQL хранилище в приемлемые сроки", Александр Календарёв

  1. 1. Когда надо изобретать свой велосипед? Строим NoSQL хранилище в приемлемые сроки Календарев Александр Программист РБК-Медиа akalend@mail.ru 2013 dev.it-portfolio.net
  2. 2. О чём доклад - о велосипедах NoSQL key/value хранилищах это очень просто Сделай сам dev.it-portfolio.net 2
  3. 3. О велосипедах dev.it-portfolio.net 3
  4. 4. О велосипедах dev.it-portfolio.net 4
  5. 5. О велосипедах dev.it-portfolio.net 5
  6. 6. О велосипедах - Под конкретные условия местности свой велосипед - Велосипеды эволюционирует, как впрочем и все на свете, в том числе системы хранения данных - Следовательно, всегда полезно думать над их улучшением - Значить, и стоит пытаться изобрести что-то новое dev.it-portfolio.net 6
  7. 7. О велосипедах - Под конкретные условия местности свой велосипед - Велосипеды эволюционирует, как впрочем и все на свете, в том числе системы хранения данных - Следовательно, всегда полезно думать над их улучшением - Значить, и стоит пытаться изобрести что-то новое - Или украсть идею и приспособить под свои нужды dev.it-portfolio.net 7
  8. 8. О велосипедах - Может получиться dev.it-portfolio.net 8
  9. 9. О велосипедах - Может получиться - А может и нет dev.it-portfolio.net 9
  10. 10. О велосипедах - Может получиться - А может и нет - Это как повезет dev.it-portfolio.net 10
  11. 11. О велосипедах - Может получиться - А может и нет - Но в любом случае Вы всегда останетесь в плюсе: - получите новый опыт и знание dev.it-portfolio.net 11
  12. 12. О чём доклад - о велосипедах NoSQL key/value хранилищах это очень просто Сделай сам dev.it-portfolio.net 12
  13. 13. NoSQL - Термин озвучен 1991 Carlo Strozzi - Carlo Strozzi 1998 представил ”NoSQL RDBMS, Copyright (C)”, язык запросов 4GL - 2009 на “Open Source” Конференции применили этот термин ко всем хранилищам, не относящимся к RDBMS dev.it-portfolio.net 13
  14. 14. - Документно-ориентированные БД Key/value хранилища Поколоночные БД Графовые БД Подробнее http://nosql-database.org/ dev.it-portfolio.net 14
  15. 15. Документно-ориентированные - Данные представлены в виде документов - Форматы документы: - XML: BerkeleyXML (XQuery), Sedna, Tamino (XQL) - JSON/BSON: MondoDb(BSON), CoachDb(JSON) - msgpack: Kumofs, tarantool 2.0 Рекомендуется использовать для слабо структурированной информации dev.it-portfolio.net 15
  16. 16. Key/value хранилища Key-value хранилища запоминают и извлекают документы по ключу. Распределенные хеш-таблицы (DHT) Пример: Riak, Voldemort, aerospike Key/value хранилищa Пример: Redis, Tokyo/Kyoto Tyrant , tarantool 1.5, MemcacheDb dev.it-portfolio.net 16
  17. 17. Поколоночные БД - Данные собраны в колонки и представляют собой хеш таблицы. dev.it-portfolio.net 17
  18. 18. Поколоночные БД Преимущества: - быстрая вставка, - где документ представляем много колонок - агрегирующие запросы в разы выше Примеры: MonetDb, Accumulo, Vertica, Teradata Недостаток: сложность загрузки данных Cassandra, Hbase – не имеют поколоночную модель данных (технология SSTAble) dev.it-portfolio.net 18
  19. 19. Графовые БД Данные в виде сетевой модели Пример: Neo4, InfoGrid, GraphBase, DEX dev.it-portfolio.net 19
  20. 20. NoSQL сравнение моделей хранения key/value RDBMS документно-ориентированные поколоночно-ориентированные dev.it-portfolio.net 20
  21. 21. О чём доклад - о велосипедах NoSQL key/value хранилищах это очень просто Сделай сам dev.it-portfolio.net 21
  22. 22. Key/Value Хранилище - Index и Массива данных (bucket) - Сетевой части - Вспомогательных Tools : - Конфигурация - Репликация - Мониторинг dev.it-portfolio.net 22
  23. 23. Index + Bucket dev.it-portfolio.net 23
  24. 24. Index - Hash (хеш) - Теоретически доступ/вставка за пост время: O(a) - Поиск строго по ключу (операция равно). - BTree (двоичное дерево) - Поиск по диапазону - Теоретически доступ за O(log2(n) ÷ n) или O(h) - Удаление – очень дорого O(l *log2(n) ) Недостаток: разбалансировка Разновидности: Btree+, AVL-Tree, RB-tree, 2-3-tree … dev.it-portfolio.net 24
  25. 25. Hash таблица f = crc32(key) % n Хеш-функция: crc32/64, md5, Jenkins, Murmur Масив данных [bucket] для хранения dev.it-portfolio.net 25
  26. 26. Hash таблица Так как объем Банк данных конечный, то возможна коллизия: Sabdra Dee & John Smeet dev.it-portfolio.net 26
  27. 27. Hash Хеш таблицу характеризуют – Ёмкость bucket – Разреженность массива – Длинна элемента массива f = key % n коллизия Key 1 Хеш функция Длинные данные Данные Key 51 Данные Key 2 Длинные данные . . . . . . Длинные Данные часть II dev.it-portfolio.net 27
  28. 28. О чём доклад - о велосипедах NoSQL key/value хранилищах это очень просто , cделай сам dev.it-portfolio.net 28
  29. 29. Что надо сделать? - Понять требования - Изучить существующие решения - Найти подходящее API: - BerkeleyDb dict, qhash, Tokyo Cabinet LevelDb Sophia dev.it-portfolio.net 29
  30. 30. Что надо сделать? - Понять требования Изучить существующие решения Найти подходящее API Сделать тесты Выбрать сетевую модель: - Однотредовая (corotine)/многотредовая модель block/nonblock: select, poll, epoll, kqueue libevent, libev (взять существующие библ.) Найти готовый кусок кода dev.it-portfolio.net 30
  31. 31. Что надо сделать? - Понять требования Изучить существующие решения Найти подходящее API Сделать тесты Выбрать сетевую часть Определиться с протоколом. dev.it-portfolio.net 31
  32. 32. О проекте - Служба знакомств 50 млн. анкет 25 млн. активных 25-90 тыс. сессий dev.it-portfolio.net 32
  33. 33. О проекте (функциональная часть) - Просмотр и поиск анкет Система сообщений Голосовалки Симпатии, Лайки Сбор статистики Геосервис : кто рядом. dev.it-portfolio.net 33
  34. 34. Что хотелось хранить? - Результаты голосований Лайки Информация о просмотрах (счетчики) Геоданные dev.it-portfolio.net 34
  35. 35. Лайки, голосовалки, просмотры Counter: 1 Alice Кто : 01 Bob: 01 dev.it-portfolio.net 35
  36. 36. Лайки, голосовалки, просмотры Counter: 2 Alice Кто : 01, 02 Bob: 01 Carol : 02 dev.it-portfolio.net 36
  37. 37. Лайки, голосовалки, просмотры Counter: 3 Alice Кто : 01, 02, 05 Bob: 01 Carol : 02 Carlos : 05 dev.it-portfolio.net 37
  38. 38. Что хотелось? - Простую функциональность: - get(key) - set(key) - increment ( key ) - Кандидаты: redis – можно использовать через Хеши tarantool – удобный встроенный API (Lua) dev.it-portfolio.net 38
  39. 39. Что хотелось? - Простую функциональность; get/set, Increment ( key1 , key2 ) - Персистентность если упало, то данные не потерялись dev.it-portfolio.net 39
  40. 40. Что хотелось? - Простую функциональность - Персистентность - Что-то не сложное и быстрое - не занимающее много места - MongoDb такое же сложное, как MySQL dev.it-portfolio.net 40
  41. 41. Что хотелось? - Простую функциональность: Персистентность Что-то не сложное Не memory-only - вдруг не хватит места: - redis, tarantool не подходят - Tokyo Tyrant – сложно реализовать лайки dev.it-portfolio.net 41
  42. 42. Протокол - Разработать свой Преимущества: учтены все особенности - Взять существующий Преимущества: не нужно разрабатывать клиенты Недостатки: необходимо расширение, доработка под свои особенности dev.it-portfolio.net 42
  43. 43. Протокол взять существующий - Бинарный: protobuf, msgpack, memcached-bin, Apache-thrift, Apache-Avro, BSON,… компактнее, быстрее, сложнее отладка - Текстовый: XML, JSON, memcached, redis, … Проще отладка Есть утилиты: telnet, nc, memget, redis-cli dev.it-portfolio.net 43
  44. 44. Протокол memcached - GET ˽ [key] rn SET ˽ [key] ˽ [flag] ˽ [expire] ˽ [bytes] rn INCR ˽ [key] ˽ [value] ˽ [NOREPLAY] rn DELETE ˽ [key] ˽ [NOREPLAY] rn STATS rn FLUSH_ALLrn dev.it-portfolio.net 44
  45. 45. Расширяем протокол - Добавляем новые служебные команды: - FLUSH ˽ 1rn - SHOW INIrn - STAT CLEAR rn - Расширяем существующие команды через ключ: - key: prefix.key[.subkey] - Вводим понятие относительная адресация / - Вводим понятие символьный вид # dev.it-portfolio.net 45
  46. 46. Философия построения хранилища - Используем понятие «Банк данных» Банк данных – обособленный массив данных, место для хранения (bucket) - Разбиваем данные по функциональности: лайки, голосования, просмотры - Каждой сущности по своему банку. - Номер банка определен префиксом ключа dev.it-portfolio.net 46
  47. 47. Принцип построения хранилища Номер банка определен префиксом ключа Key prefix 32 bit `` key 32 bit Банк 1 GET 1.23456 Банк 2 GET 3.23456 GET 2.23456 Банк 3 dev.it-portfolio.net 47
  48. 48. Принцип построения хранилища Номер банка определен префиксом ключа Несколько банков могут быть объединены в одну физическую хеш таблицу (определяется конфигом) Достоинство такого распределения: • уменьшаем нагрузку на каждую хеш таблицу • Шаг к масштабированию • Распределение по типу использования dev.it-portfolio.net 48
  49. 49. Типы банков - Бинарные данные Символьные данные Счетчики [4 байта] «Индексные данные» на базе RB-tree Индексные данные могут быть привязаны к счетчикам Привязка осуществляется в конфиге. dev.it-portfolio.net 49
  50. 50. Реализация счетчика просмотров Счетчики просмотров: INCR ˽ 1.5 ˽ 1 rn ключ анкеты = 5 SET˽ 1.5 ˽ 0 ˽ 0 ˽ 1 rn 0 rn сброс 50
  51. 51. Реализация лайка Alice Bob:01 - Увеличение счетчика Алисы : INCR ˽ 1.5 ˽ 1 rn ключ Алисы = 5 - Добавляем в хеш Алисы ключ Боба: SET ˽ 2.5.1 ˽0˽0˽1rn1rn ключ Боба = 1 dev.it-portfolio.net 51
  52. 52. Реализация лайка Alice Bob:01 Однако если расширить протокол: INCR ˽ 2.5.1/1 ˽ 1 rn key Вместо двух обращений – одно. dev.it-portfolio.net 52
  53. 53. Реализация лайка - Вариант 1, как сортированный массив. - Доступ за ln(n), n = 100 – 4 000 ( 7-14 шагов ) - Трудности с алгоритмом Garbage Collector. - Вариант 2, используем Tree индекс - Индекс составной 64 bit: key1 `` key2 32 bit 32 bit - Выборка диапазона Key1 0x00 - Key1 0xFFFFFFFF dev.it-portfolio.net 53
  54. 54. Расширяем протокол Вводим понятие символьный вид # Запомнили в символьном виде: SET ˽ #1.5 ˽0˽0˽1rn1rn GET ˽ #1.5 rn вернет символ “1” – 1 байт GET ˽ 1.5 rn вернет int32: 0x1 – 4 байта SET ˽ 1.5 ˽0˽0˽1rn1rn GET ˽ 1.5 rn вернет int32: 0x31 Пригодится в отладке типа index dev.it-portfolio.net 54
  55. 55. чистка мусора (garbage collector) Удаленные профили нужно удалять из хранилища Требуется перебор всех данных Делается, блоками, когда процессор наименее загружен Вычисляем загрузку сервиса, Подбираем опытным путем. dev.it-portfolio.net 55
  56. 56. Проблемы - Удаленные профили надо чистить - Постоянно растет память, нужно сбрасывать кеш, переоткрывать таблицы - Вывод: Необходим мониторинг dev.it-portfolio.net 56
  57. 57. Мониторинг - Команда stats - Настраиваем rdd - Рисуем графики dev.it-portfolio.net 57
  58. 58. Мониторинг - Память из /proc/self/mstat - Производительность: кол-во запросов в сек - Загрузка: отношение времени исполнения к циклу измерения - Размер корзины - Общее кол-во ключей dev.it-portfolio.net 58
  59. 59. Мониторинг dev.it-portfolio.net 59
  60. 60. Тестирование API покрыли тестами Схх http://cxxtest.com Тестирование производительности: aналог Apache ab, протокол memcached https://github.com/akalend/mcstrass dev.it-portfolio.net 60
  61. 61. Используемые Библиотеки libev – сетевая однотредовая модель libtokyocabinet – hashdb & treedb tcmalloc - Memory pool allocator dev.it-portfolio.net 61
  62. 62. Рекомендуемые Библиотеки Сетевые: libevent2 http://libevent.org/ libev http://software.schmorp.de/pkg/libev.html Коротины: libcoro http://software.schmorp.de/pkg/libcoro.html pcl http://xmailserver.org/libpcl.html libtask http://swtch.com/libtask/ dev.it-portfolio.net 62
  63. 63. Рекомендуемые Библиотеки Хештаблицы: Tokyo/Kyoto http://fallabs.com/ [cabinet] libdict https://github.com/fmela/libdic strmap http://pokristensson.com/strmap.html sglib http://sglib.sourceforge.net/ Judy http://judy.sourceforge.net/ levelDb http://code.google.com/p/leveldb/ Sophia http://sphia.org/ uthash http://troydhanson.github.io/uthash/index.html sunriseDb http://www.sunrisetel.net/software/devtools/sunrise-datadictionary.shtml dev.it-portfolio.net 63
  64. 64. Рекомендуем почитать Блог о высоких нагрузках http://highloadblog.ru/ http://ru.wikipedia.org/wiki/Хеш-таблица http://ru.wikipedia.org/wiki/B-дерево Алгоритмы и структуры http://algolist.ru/ Опыт создания key/value хранилищ СА сент,окт,нояб,дек 2012, март 2013. dev.it-portfolio.net 64
  65. 65. Вопросы Q: Open Source ? A: в полной версии нет, не вижу смысла есть прототип, который можно заточить под любые нужды вашего проекта https://github.com/akalend/mymc dev.it-portfolio.net 65

×