LINUX.ORG.RU

Web морда для простой базы

 ,


1

3

Для web я последний раз серьёзно писал на перле лет десять назад, после только простые сайтики без динамического бэкэнда. Собственно вопрос - во что сейчас имеет смысл вникнуть чтобы написать простую stateless морду для небольшой базы (десятки тысяч записей; достаточно маленькая чтобы целиком влезть в память, но слишком большая чтобы отдать всю в .json'е клиенту). Нужно всего навсего листать эту базу по страничкам с некоторыми фильтрами, искать по подстроке в одном поле и для конкретных записей генерить svg картинки, которые видимо, понадобится кэшировать. Крутиться будет на небольшом VPS (1 ядро, гиг памяти). База read-only, но периодически обновляется batch'ем вся целиком.

1. Язык. Что сейчас есть для не слишком навороченного и требовательного бэкэнда? Думаю взять питон, потому что перл во-первых, забыл, во-вторых, как ни крути он read only. Ещё варианты? node не хочу из-за уродливой и небезопасной системы модулей.

2. База. Взять mysql и не париться? Или какой-нибудь новомодный NoSQL может оказаться даже проще в моём случае? Или даже вообще без базы (см. 3)?

3. Как собственно организовать бэкэнд? CGI как я понял это прошлый век, да и отдельный апач для них поднимать неохота (nginx уже работает). Имеет право на жизнь вариант когда бэкэнд просто слушает по HTTP и проксируется nginx'ом? В таком случае я бы и mysql не поднимал, а просто загрузил всю базу в память.

Если рассуждения правильные, посоветуйте модулей/фреймворков для питона на которых это будет просто реализовать. Если база в памяти, нужен, по сути, только производительный HTTP сервер и простой фреймворк для диспатчинга запросов, возможно шаблоны (на слуху jinja2?).

★★★★★

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

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

datatables.net - таблица на javascript с листанием по страницам и поиском по отдельным полям

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

Чем вы руководствуетесь когда советуете sqlite? Ужели вы думаете что пыхтение SQL будет быстрее и удобнее чем просто из словаря вернуть значение? Ладно бы датасет не влезал в память, но я несколько раз написал что влезает.

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

Спасибо, я в курсе. Мне повторить вопрос?

slovazap ★★★★★
() автор топика
26 июня 2017 г.

Если кому интересно, сделал на postgresql + flask.

База разрослась до миллиона записей и понадобились чуть более разные выборки чем просто листание по страницам, так что СУРБД можно было сразу закладывать. mysql выкинул сразу как он мне по умолчанию начал слушать на 0.0.0.0 и несколько секунд считал count(*) по таблице с primary key. Как позже выяснилось, это нормально и я был неправ, но вместе с тем я очень рад что переполз на postgres, бо тот умеет очень много всего помимо реляционщины, как-то json типы, fulltext поиск на триграммах (то что мне нужно для поиска по коротким полям), всякие удобные представления и бог весть что ещё, работает быстро, конфигурится легко, развивается резво.

Приложение - flask под uwsgi за nginx. С базой работает через обычный psycopg2, ORM не нужны.

Всё это летает на том же VPS с гигом памяти и 1 CPU без каких либо настроек postgres'а, отвечает по большей части за < 200 msec, нагрузка ~ 100k req/day.

База отвечает за десятки мсек, за исключением некоторых неоптимальных запросов, на которых может затупить на секунду. Они редкие и мне лень пока их оптимизировать.

А остальное время тратит, та-да, питон, причём не мой код (у меня просто выгрести из базы - переложить в словарь - отдать в шаблон). У меня на страницах обычно много (сотня+) ссылок, так вот время тратится на вычисления во flask'овских url_for (которые на самом деле ведут куда-то вглубь werkzeug). Хоть ответ за 200мсек это и приемлемо, но в сумме это часы процессорного времени в день. Не думаю что это будет просто исправить, так что с нуля я бы начал проект на более другом языке - go, rust, c++, главное чтобы там был фреймворк максимально похожий на flask (с одной стороны, всё необходимое - роутинг, шаблоны с плюшками типа url_for и css защитой, куки, сессии, нотификации и т.д., с другой - нет прибитой гвоздями файловой структуры, или там моделей-видов-контроллеров, встроенных ORM и прочего дерьма).

В общем, как-то так.

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

База разрослась до миллиона записей

А это всегда так, поэтому нужно сразу брать нормальные инструменты

go, rust, c++

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

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

Не, никакой жавы, никогда, нигде. Наелись, спасибо. Перечисленные языки бурного энтузиазма тоже не вызывают, но жава? Не-не-не. Тем более не на 1G VPS.

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

Да-да-да, рассказывайте дальше.

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

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

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

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

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