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)

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

1. python bottle

Есть какие-нибудь критери выбора между bottle/flask/cherrypy?

3. nginx uwsgi

Есть какие-нибудь профигы uwsgi (как я понял это application сервер который внутри будет запускать моё приложение) над просто моим приложением слушающим 8080?

slovazap ★★★★★
() автор топика

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

Ты сейчас описал монгу

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

С его количеством звездей пора бы уметь читать мануалы

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

Да ты же поехавший, нахер ему ORM, если ему хватит монги, которая сама по себе умеет HTTP API и по сути в одиночку справится с его задачами на 90%, останется только html с css'ом прикрутить и любую либу для рисования svg

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

У постгреса уже есть свой встроенный вебсервис с поиском, фильтрами и постраничным выводом? Или ты слышал звон про json'ы в постгресе и только поэтому метанируешь тут?

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

Я же написал что база маленькая. Что-что, а postgres городить я ради неё точно не буду. То что я прочитал про монгу звучит интересно, т.к. она позволяет отказаться от приложения полностью. Если это не получится, то толку в ней нет. Как я понимаю, svg же прямо из неё не отдать?

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

Как я понимаю, svg же прямо из неё не отдать?

SVG - тот же XML и тот же BSON. Отдать его не проблема, но зачем?

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

Что значит «зачем»? Потому что его надо отдать, а если это позволит выкинуть приложение оставить на бэкэнде только базу и nginx то это круто. Если это умеет именно база, т.е. вернуть прямо svg, а не данные по которым клиентский javascript будет лепить svg, то это то что нужно. Такое вообще практикуется? И насколько это безопасно? Если база будет торчать по HTTP и пользователи смогут дёргать на ней любые запросы это как-то стрёмно.

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

Монга тебе отдаст BSON, который в SVG превращается парой абсолютно не затратных строк. Тюнинг, как тут уже сказали, понадобится, чтобы чего лишнего в интернет задом не выставить, но он настолько подробно описан, что это вообще не проблема. В общем то, что я вижу в твоих требованиях - read-only find с фильтрами и пажинацией, это именно то, для чего монга и нужна. Настроил один раз, написал 3 строки на вебморде и вечером отметил успешное завершение проекта. С твоими объемами можешь даже не читать про индексы. Ну или почитать и отложить празднование на пару часов

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

критери

По твоему критерию «простота» на первом месте будет bottle. Весь фреймворк — один файл, который ты просто импортируешь в своё приложение. Есть простой встроенный однопоточный сервер.

профигы uwsgi

Асинхронный IO, многопоточность, нативная поддержка nginx, отличная документация. Если надо что-нибудь попроще, то можешь из списка, который bottle предлагает, выбрать.

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

И какой же у монги «встроенный» веб сервис с поиском и постраничным выводом, мусье?

menangen ★★★★★
()

десятки тысяч записей; достаточно маленькая чтобы целиком влезть в память, но слишком большая чтобы отдать всю в .json'е клиенту

Вообще, это — достаточно маленькая, чтобы отдать всю в .json'е клиенту

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

А что ты в svg собираешься рисовать? Чарты/статистику? Типа сколько товаров было куплено за месяц по сравнению с позапрошлым?) Тогда тебе надо писать бэкенд на flask + sqlite через pewee, и рисовать через клиентские JavaScript либы типа chart.js.

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

Да тут хз, чо ТС хочет с svg делать, он кроме «отдавать» и «генерировать» аще ничего не говорит. То ли ему по данным картинки строить то ли по готовому svg картинку на клиенте генерить

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

По твоему критерию «простота» на первом месте будет bottle. Весь фреймворк — один файл, который ты просто импортируешь в своё приложение. Есть простой встроенный однопоточный сервер.

Простенький ИМХО ляжет когда придёт много народу. Мне не нужен прям хайлоад, но всё-таки оно должно мало-мальски масштабироваться.

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

Вообще, это — достаточно маленькая, чтобы отдать всю в .json'е клиенту

Это десять метров и для клиента который пришёл за одной строкой это дофига.

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

А что ты в svg собираешься рисовать? Чарты/статистику?

Типа того, но svg'шки должны ставиться на сторонние страницы, поэтому никакого клиентского кода там быть не может, нужно отдавать сразу svg.

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

Примитивный прокси к монге (да, я понимаю, как это выглядит, но *sql тебе не нужен тут, а из nosql это лучшее), прикрывающий анус монги и парсящий BSON до голого SVG. День работы максимум с уровнем подготовки джуниора из недоделанных студней

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

Ну в том то и мысль что если нельзя обойтись одной монгой, то она мне не нужна. В том смысле что сделать приложение и поднять базу в память.

slovazap ★★★★★
() автор топика
Последнее исправление: slovazap (всего исправлений: 1)
Ответ на: комментарий от anonymous

Точно, это забыл. Но оно, говорят, тяжёлое, и с нуля учить не охота.

slovazap ★★★★★
() автор топика

bottle

там всего кода будет - строк 20 (+html-шаблоны). бд, судя по всему, нафиг не нужна - просто храни в dict в памяти, будет мегабыстро и мегапросто

buratino ★★★★★
()

Имеет право на жизнь вариант когда бэкэнд просто слушает по HTTP и проксируется nginx'ом?

да, разумеется. это самый простой вариант, который *просто работает*, на производительность ещё ни разу не жаловался

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

Простенький ИМХО ляжет когда придёт много народу.

много - это сколько?

используй server='gevent' или server='gunicorn', всё это в bottle есть

buratino ★★★★★
()

Flask+peewee+flask-potion - пажинация, json из моделей, модели из существующих таблиц, CRUD. Только слегка склеить своим кодом.

Shadow ★★★★★
()

всего навсего листать эту базу

это не так просто как может показаться - в этой простоте порою скрывается весь стек годных технологий

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

server=

Ещё поговаривают bjoern всех рвёт.

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

Спаибо, эзотерические языки меня не интересуют.

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

а можно пример БОЛЬШИХ БАЗ на mysql? ну, кроме случаев, когда два пыхера, не знающие ничего кроме php/mysql, нагородили огород, а он вдруг взлетел (в этом случае не было серьёзного выбора базы, а был только между mysql и mysql, ибо больше они не знают ничего). а вот конкретный такой, осознанный, выбор

а в случае автора вообще проще всего загонять всё в память в dict - скорость будет огромной, и в потолок будет сложно упереться

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

даже не на марию/перкону, а на mysql? ну, деребанящие чужие деньги деребанят их во всём, теперь и оракловые :)

смешно, конечно, но зачтено. верим в mysql :)

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