LINUX.ORG.RU

Релиз Microcached 1.0

 microcached,


1

4

Microcached — маленький и эффективный кэш-демон.

Здравствуйте, после многих лет работы с Memcached, я подумал, что было бы неплохо иметь под рукой похожий инструмент, который был бы таким же простым и удобным, и который давал бы возможность выполнять поиск среди ключей на стороне сервера, используя регулярные выражения. Мне всегда казалось, что выполнять мультизапрос на получение всех ключей и обрабатывать огромный массив этих ключей на стороне PHP — не самый лучший способ получить нужные данные.

Целью было создать быстрый кэш сервер, простой и удобный, как молоток.

Хочу представить сообществу продукт своего труда — маленький и эффективный кэш-демон Microcached 1.0.

Среди поддерживаемых платформ на данный момент только операционные системы на базе ядра Linux.

Основные возможности демона:

  • Маленький и эффективный, написан исключительно на Си, используется механизм опроса файловых дескрипторов Linux epoll API;
  • возможность работать с кэш-записями размером до 4ГБ ОЗУ (суммарное ограничение для одной записи);
  • очень простой, такой же простой, как и Memcached;
  • позволяет выполнять запросы на фильтрацию/удаление ключей (и записей, ассоциированных с ними) за счет использования регулярных выражений PCRE;
  • предоставляет простой и понятный клиентский интерфейс, бинарный протокол общения между клиентом и сервером.

Лицензия MIT.

>>> Подробности



Проверено: Falcon-peregrinus ()
Последнее исправление: DeadEye (всего исправлений: 4)
Ответ на: комментарий от vitalif

Интересное замечание! Но назвать Microcached базой данных у меня язык не поворачивается, возможно получилось гибридное решение.

excanoe
() автор топика
Ответ на: комментарий от spec_po_kiskam

Гитхабом не пользуюсь как и Git в принципе, у меня вся домашняя «инфраструктура» завязана на Mercurial.

excanoe
() автор топика
Ответ на: комментарий от spec_po_kiskam

По той же причине, почему я не пользуюсь гитхабом. Я использую свой сервер для контроля версий, репозиторий на Битбакет, это официальное зеркало, оно не предназначено для разработки.

excanoe
() автор топика

М-да. Рвению автора, безусловно, можно только позавидовать, но соглашусь со многими уже высказавшимися: так и непонятно, зачем может быть нужен этот наколенный велосипед, когда есть Redis, Tarantool и грамотно настроенный Postgre. LRU нет, keepalive нет, кроссплатформенности нет, нормальных биндингов нет, клиент на php... Как говаривали в лохматые времена — вашу бы энергию, да в мирных целях.

anonymous
()
Ответ на: комментарий от anonymous

На что люди только не пойдут, лишь бы не использовать Tarantool

А ведь ты прав! Чтобы не связываться с поделкой от mail.ru, люди готовы пойти на многое.

anonymous
()
Ответ на: комментарий от anonymous

Я как автор, могу позволить себе субъективность и даже некую эмоциональность, поэтому отвечу на ваше сообщение таким образом:

Далеко не каждый наколенный велосипед тестируется прогонами в 1 миллиард операций на вставку с рандомными ключами из диапазона 1..1000000000.

Далеко не каждый наколенный велосипед тестируется прогонами на вставку объектов размером в 4 гб, когда PHP просто молча падает и приходится уменьшать размер ключа и значения кэш-записи.

Я уверен, что автор redis слышал похожие вопросы, автор PostgreSQL слышал похожее, зачем создавать, когда есть MySQL. Я считаю, что возможность выбора, это всегда лучше, чем отсутствие выбора.

Клиентский модуль в качестве загружаемой библиотеки, это дельное замечание, но в тоже время, я считаю что клиент написанный на PHP - это правильное решение.

Я уверен, что детские болезни уйдут :)

excanoe
() автор топика
Ответ на: комментарий от excanoe

Я уверен, что детские болезни уйдут :)

Чтобы они ушли, нужно сообщество. Чтобы оно могло: 1. предлагать улучшения 2. заводить дефекты 3. присылать патчи

В ситуации, когда у вас свой приватный репозиторий этого ничего не будет. Также обязательно наличие .so для клиентской части. Люди смогут сделать биндинги к своим любимым языкам, что значительно увеличит объем сообщества.

anonymous
()
Ответ на: комментарий от anonymous

зачем может быть нужен этот наколенный велосипед, когда есть Redis, Tarantool и грамотно настроенный Postgre

Зачем нужны комнатные растения, если есть собаки? Мозга нет, подвижности нет, нормальных взаимоотношений с человеком нет, растут на гнилом говне чернозёме...

no-such-file ★★★★★
()
Ответ на: комментарий от anonymous

наличие .so для клиентской части. Люди смогут сделать биндинги к своим любимым языкам, что значительно увеличит объем сообщества.

Если бы в качестве протокола был Protocol Buffers, с клиентами для кучи популярных языков было бы гораздо проще.

Manhunt ★★★★★
()
Ответ на: комментарий от excanoe

Еще бы добавил, что лично я считаю Redis и Memcached замечательными инструментами, мой демон, для тех, кому нужен простой инструмент.

Manhunt не демон :)

Deleted
()
Ответ на: комментарий от Deleted

В принципе, звучит достаточно почтительно, и я не возражаю против того, чтобы ко мне обращались именно так :D

Manhunt ★★★★★
()
Ответ на: комментарий от excanoe

Я конечно вижу, что проект небольшой, но я предвижу 4 возможных исхода:

1. Проект никому не нужен, кроме 2,5 лоровцев.

2. Вам платят за проект и вы над ним работаете полный день.

3. Проект забрасывается.

4. Вы выкладываете его в нормальный опенсорс и принимаете патчи.

Это если проект серьезный, а не поиграться. Если поиграться, можно и сорцы в архивчике через дропбокс распространять :)

spec_po_kiskam ★★★
()
Последнее исправление: spec_po_kiskam (всего исправлений: 1)

ты еще не удалил проект?

anonymous
()

Тред не читал.

Где сравнение производительности?

tazhate ★★★★★
()
Ответ на: комментарий от spec_po_kiskam

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

На данном этапе именно так.

Я не считаю, что доступ к репозиторию на чтение, это не есть «нормальный опенсорс». У вас есть полный доступ к исходному коду, у вас есть полная свобода действий в рамках лицензии, под которой распостраняется код проекта.

Это проект, который разрабатывается одним человеком и доступен сообществу, это не есть проект, разрабатываемый сообществом. Я получил массу полезных отзывов и я отношусь к конструктивным замечаниям с должным уважением.

excanoe
() автор топика

Заинтересовался этим проектом. В Morpho Framework нужна возможность быстро искать routes по регуляркам. Если ли возможность для заданного рег. выражения найти запись? Например для рег. выражения '~^(?|/task/([^/]+)/close|/task/([^/]+)/postpone())$~' найти записи ему соответствующие? Будет ли поиск быстрым, если в кеше/базе скажем 10^7 записей?

ProtoH
()
Ответ на: комментарий от ProtoH

К сожалению, поиск не будет быстрым с таким количеством записей, ввиду того, что производится полное сканирование всех ключей на соответствие регулярному выражению. По моим замерам, на один миллион записей нужно 150ms.

Я рекомендую использовать grep для пакетной обработки, где нет жестких требований к задержкам.

excanoe
() автор топика
Ответ на: комментарий от reprimand

Вспоминается болезнь «кроссплатформенного» аудио, когда разрабы вместо поддержки alsa библиотеки юзают какие-то костыли типа portaudio

откуда вы такие беретесь? вот как мне потом на OpenBSD ваш софт с альсой использовать?

val-amart ★★★★★
()
Ответ на: комментарий от anonymous

Я как виндузятник, могу сказать, что не страдаю :)

excanoe
() автор топика
Ответ на: комментарий от anonymous

На что люди не пойдут, лишь бы пропихнуть Tarantool и прочий mail.ru

anonymous
()

яснопонятно

static int bmap_lookup(struct ph *page, const void *key, int *location) {
  for ((*location) = 0; (*location) < page->usage; (*location)++) {
    struct kv *record = (0);

    record = (void *)((uint8_t *)page + sizeof(struct ph) + sizeof(struct kv) * (*location));

    if (((const uint32_t *)key)[0] != ((uint32_t *)record->key)[0]) {
      continue;
    }

    if (memcmp(&((const uint32_t *)key)[1], &((uint32_t *)record->key)[1], ((const uint32_t *)key)[0]) == 0) {
      return 0;
    }
  }

  return BMAP_NOTFOUND;
}
mix_mix ★★★★★
()
Ответ на: комментарий от anonymous

только операционные системы на базе ядра Linux

просто эталонное «нинужно»

Ты думаешь он потенциально будет использоваться еще где-то?)

anonymous
()

Кинул в него китайские иероглифы (мегабайт где-то) через телнет, он взял и подох.

anonymous
()

А шо у вас с мастер-мастер?

anonymous
()

Зачем вообще перебирать ключи в key/value storage? Это убивает какой-либо смысл такого типа хранилища. О какой эффективности тогда вообще речь? Может проблема в забивании гвоздей микроскопом, а не в самих гвоздях? И время лучше было бы потратить на изучение best practices? Да и опять же, для каких-то особых извращений в том же redis есть lua script, например. Но это же надо было документацию читать.

d9d9 ★★★★
()
Ответ на: комментарий от d9d9

Да в принципе незачем :) Но если можно, то почему бы и нет?)

excanoe
() автор топика
Ответ на: комментарий от d9d9

Я когда делаю дамп счетчиков посещаемости, мне удобно выбирать только нужные ключи со всех нод, а не ВСЕ ключи со всех нод.

excanoe
() автор топика
Ответ на: комментарий от Manhunt

А почему не libevent?

Да хоть libev или libuv, все равно все на линуксе сведется к epoll.

Дяденька, матчасть не знаете, а выступаете, не хорошо это, не правильно))

anonymous
()

Вообще, исходя из сообщений получается следующее: (ненужно), почему, если уже есть redis/tarantool/etc? (ненужно), почему epoll, если уже есть libev/libuv/libetc? (ненужно), почему bitbucket, если есть github (кстати хороший вопрос, исходя из логики людей, кто-то явно лишний), почему меркуриал если есть гит (same story)?

Я думаю что ответ на эти вопросы кроется в ответе на вопрос, «почему люди покупают домой тапки, если у них уже есть зимние ботинки?».

Самый простой ответ, потому что мне так удобно.

Что я реально услышал, так это то, что нужен трекер ошибок, клиентский динамический модуль (и дело даже не в скорости работы, те кто реально работают, знают что задержки в сети нивелируют разницу в скорости работы нативного и динамического кода).

Если есть замечания/вопросы по сути, которые не относятся к тому, почему ненужно кому-то вообще нужно, я с неописуемым трепетом буду ждать таких комментариев, они для меня бесценны.

excanoe
() автор топика
Ответ на: комментарий от excanoe

Я думаю что ответ на эти вопросы кроется в ответе на вопрос, «почему люди покупают домой тапки, если у них уже есть зимние ботинки?».

Потому, что тапки обладают рядом преимуществ перед ботинками. При использовании в качестве домашней обуви, эти преимущества достаточно весомы для того, чтобы потратиться именно на тапки.

Самый простой ответ, потому что мне так удобно.

С технической точки зрения, это плохой ответ.

Manhunt ★★★★★
()
Ответ на: комментарий от anonymous

Наверное в build.sh есть что-то ubuntu-специфичное.

anonymous
()
Ответ на: комментарий от Manhunt

С технической точки зрения вы совершенно правы.

excanoe
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.