Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

The Black Hole — Сервер для Полнотекстового поиска

Друзья мои !
Пока в горячих августовских кузницах закаляют кремний для инновационного процессора KPU, когда недалек тот час когда операционка на менеджед языке будет проживать в бутсекторах каждой второй кофеварки, левое крыло отвечающиее за разработку национальных баз данных старается не отставать.

Нашел время и допилил для широкого использования свой старый проект
Full Text Search engine + tools. Есть вся экосистема которая устанавливается в несколько кликов инсталляторами на Windows в виде:
1. Сервер баз данных, хостится как Windows Service и паблишит вебсервис.
2. Поисковый сайт, для поиска по базе данных
3. Шаблоны роботов\краулеров\джобов для заполнения бд, которые можно кастомизировать на обход и индексирование ваших ресурсов. (.NET)

Не удивляйтесь слишком пафосному названию, эта штука расчитана на действительно большие обьемы данных, которые вы сливаете как в бездонную бочку, причем на слабом оборудовании. Полнотекстовый индекс занимает лишь 1-3% от текста технологии упаковки до 60 слов в одном байте в инвертированных структурах данных, а скорость индексирования блягодаря HArray (github.com/Bazist/HArray), может достигать до 50 мб\сек при малой загрузке CPU. Наибольшая известная мне база построенная на этом движке занимала 14 террабайт текста (логи) и загружалось туда больше 100 гб текста ежесуточно.
Пример меньшей базы, которую можно вскользь пощупать, поисковый сайт booben.com, роботы которого наполняют эту базу круглосуточно уже несколько лет.

Буду рад ответить на все вопросы.

Подробней на моей страничке гитхаб
github.com/Bazist/BH

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Что за...? Такой вырвиглазный дизайн ещё постараться нужно сделать.
pix.toile-libre.org/...​d/original/1533287260.png

Пожалуй лайкну, он мне тоже не нравится )

возьми минималистичный bootstrap template и прикрути его в качестве UI- а уже при желании можешь его подтюнить если из коробки не понравится

вроде и не пЪяный еще в вечер пятницы- но выговорить вот это- «ассоциацитвный» поиск- никак не могу :(

Windows это не серьёзно, был бы линукс можно было бы посмотреть

Портируй под линукс, заценим

Все проекты что до этого были на Си++, портировал, это было не сложно. Тут две проблемы. Первая — именно в этом проекте далеко не все написано на Си, а то что написано на С# уверен по дефолту в Моно не запустится. Вторая — делал упор на максимальное упрощение установки всей экосистемы, буквально в несколько кликов. Потому что у конкурентов не все так просто, если хочешь собрать «свой маленький гугль» для своих нужд. Не знаю или также просто на Линуксе все будет устанавливаться также как на Виндовс

а то что написано на С#

Портируй на .NET Core.

упрощение установки всей экосистемы, буквально в несколько кликов

Ага, т.е. автоматизация установки невозможно, збс. Буду логиниться на 1000 сервров и кликать кнопочку.

Зачем логинится, есть всего два инсталлятора. Первый устанавливает сервер. Когда ты установишь сервер, он откроет с этой машины вебсервис, через который ты можешь наполнять и искать в базе. Дальше у тебя есть опция, если ты не хочешь писать свой клиент, ставишь стандартный, поисковый вебсайт который уже настроен обращаться к этому серверу через вебсервис. Еще одна опция, как ты будешь наполнять базу. Есть стандартная заготовка для краулера, которая позволяет написать свой для обхода ресурсов (сайты, файлы, архивы с логами) и загружать их в бд по планировщику.

Потому что у конкурентов не все так просто, если хочешь собрать «свой маленький гугль» для своих нужд.

Ну будет в итоге apt-get получать пакет, разрешать зависимости и ставить сервис, и разве это будет сложно?

А как сайт устанавливается напр. на Линукс ? Я просто не в курсе, работал мало.

Я как-то ошарашен таким вопросом. Сaйт в большинстве случаев устанавливается просто. К тому же серверное ПО не ставят люди с уровнем пользователь по умолчанию. т.е. простота установки не особо важна сколько показатель возможностей и надёжности. Если бы я думал о монетизации такой штуки я бы например думал о прикручивании этой системы поиска к популярному веб серверу. А подавляющее большинство веб серверов хостятся на Линуксе пока что. Поэтому решение на Линукс куда более привлекательное.

Вагрант и докер — наши лучшие друзья. Их часто используют именно для предоставления беспроблемного сетапа для тех, кто хочет опробовать продукт.

Потянет ли ассоциативный массив на 800+ млн элементов с поиском регулярками по ключу? А то sqlserver и elastic меня разочаровали. Какая скорость bulk импорта из текстового файла? И на чем написан ( интересует запуск не как Виндоус сервиса, а как Линукс демона )

Ну база та что 14 террабайт была, хостилась на одной посредственной виртуалке. Каждую ночь туда 120 гигабайт логов загружали, норм ). Мой сайт бубен ком, роботы его наполняют уже несколько лет, 1.8 млн страниц. Индекс вообще копейки, 1.5 гб. Потянет, но нужно учитывать что поиск там без учета порядка слов и расстояния между словами. Но если логи, айдишники там разные, юзеров искать по ключам, самое оно.

Ключ — email и его составляющие. Кстати, на чем написан?

Сам движок на Си++, ибо скорость. Все инфраструктурное (вебсервис, вебсайт, краулер) на С#

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

Теперь на ближайшее пару лет у меня цель. Соединить потенциал компрессии из BH с функциональностью и транзакционностью DniproDB. Это непросто.

Хотел написать длинный пост про новый фундаментальных подход в структурах хранения иерархических данных, про качественно другие плюшки. Но скажу честно, не уверен на 100%. Хочу чтобы сначала все сошлось как надо на бумаге. Хочу все просчитать. У меня есть опыт создания подобных проектов, надеюсь все получится.

Підписатись на коментарі