• СУБД для mongoDB?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Ответ написан
    Комментировать
  • Почему MongoDB работает медленно?

    @Faliah
    В тэгах вижу mongoose. Пара советов по работе с ним: попробуйте поиграться с ограничением полей через find().select(/* объект с полями */). По умолчанию mongoose возвращает коллекцию своих обёрток над JS-объектами, которые довольно тяжелые. Получить POJO можно с помощью find().lean(). Чтобы не ждать, пока вам вернётся вся коллекция из 1500 записей, можно воспользоваться курсорами со стримами и работать с данными пачками.

    Но тут действительно сложно сказать в чём проблема - железо действительно не плохое, но проблема скорее всего в IO цикле, как это обычно и бывает, в зависимости от количества узлов между клиентом, сервером и сервером БД. Может у вас прокси перед сервером стоит и не тянет под нагрузкой, может сервер перегружен запросами и вы ждёте в очереди, может к БД много коннектов и вы, опять же, ждёте.
    Ответ написан
    1 комментарий
  • Правда ли UUID так надёжен?

    bingo347
    @bingo347
    Crazy on performance...
    алгоритм вычисления uuid использует timestamp и несколько псевдослучайных значений, вероятность того, что кто-то в мире сгенерирует такой же uuid в ближайшие 300 лет стремится к нулю
    Ответ написан
    1 комментарий
  • Правда ли UUID так надёжен?

    GavriKos
    @GavriKos
    В вашем случае намного проще генерировать ID по нику пользователя в чате (его ID-номеру в базе, чтобы короче)+таймштампу с точностью до микросекунды. Гарантированая уникальность.
    Ответ написан
    Комментировать
  • На чем написан бэкэнд Telegram?

    Demanoidos
    @Demanoidos
    безнравственный извращенец с богатой фантазией
    Я думаю, вам вряд ли это кто-то скажет. Да и какая разница, на чём написано? Erlang - это не признак "крутости", это признак того, что в компании были по нему спецы, которые пролоббировали использование этой технологии, вот и всё :)
    Ответ написан
    Комментировать
  • Как сохранять файлы на другой сервер из Node.js приложения?

    AMar4enko
    @AMar4enko
    Вам кажется, что все проще, чем кажется. Обычно для хранения больших объемов медиа-контента используются CDN, наподобие Amazon S3, с общедоступным API.
    Как раз для них есть большое количество библиотек, которые сами за вас все сделают, а вам останется только ссылку куда-то схоронить.
    Ответ написан
    1 комментарий
  • Как сохранять файлы на другой сервер из Node.js приложения?

    isqua
    @isqua
    Научу HTML, CSS, JS, BEM и Git
    Так а на какой именно сервер вы хотите сохранять картинки? Если на какой-то сторонний сервис, то нужно разбираться с его API. Если на соседнюю машину, то можно там поднять простой HTTP-интерфейс для принятия и сохранения файлов.
    Ответ написан
    2 комментария
  • Развертывание web приложения на Go?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Как это работает, чтобы понимали. Я опишу истинно правильный путь, но долгий: (как подсказал pygame , по бенчмаркам https://gist.github.com/hgfischer/7965620 всё же нативный хттп сервер в Go быстрее, чем nginx с fcgi, т.к. у Go гавняная реализация fcgi, поэтому вместо fcgi быстрее будет обычный http proxy_pass).

    1) Ставится веб-сервер нормальный, а не тот, который есть в самом Go. То есть, ставим nginx. Настраиваем ему все url маршруты, настраиваем отдачу статики.

    2) За динамикой nginx будет обращаться к нашему Go демону. По протоколу fast-cgi. Именно по нему, потому что nginx его умеет и вообще он хорош (upd: но не в Go). Это короч бинарный протокол по которому nginx передаёт в нашу Go программу HTTP заголовки запроса от браузера и получает обратно HTTP ответ. Для этого ставим простейшую обёртку для fast-cgi под названием spawn-fcgi, она будет преднастраивать и запускать нашу Go программу, готовую для общения по протоколу fast-cgi.

    3) На случай, если наша Go программа падает. Либо уже у нас есть система, которая следит за демонами и поднимает их в случае падения (systemd, upstart), тогда конфигурируем её, либо ставим таковую и тоже конфигурируем.

    Привожу пример как это всё сделано у меня (самый популярный стек технологий) на Debian:

    1) nginx
    server {
    	server_name otboi.****;
    	listen 80;
    	include fastcgi_params;
    ...
    	
    	location / {
    		fastcgi_pass unix:/var/run/otboinik.sock;
    	}


    2) systemd конфиг, который стартует нашу Go программу, завёрнутую в spawn-fcgi
    [Unit]
    Description=Otboinik
    
    [Service]
    Restart=always
    Environment=OTBOINIK_BIN=/opt/гыы/otboinik/bin/otboinik
    Environment=OTBOINIK_PID=/var/run/otboinik.pid
    Environment=OTBOINIK_USER=гыыыы
    Environment=OTBOINIK_SOCKET=/var/run/otboinik.sock
    Environment=OTBOINIK_SOCKET_USER=гыыыыы
    Environment=OTBOINIK_SOCKET_MODE=0666
    ExecStart=/usr/bin/spawn-fcgi -s $OTBOINIK_SOCKET -M $OTBOINIK_SOCKET_MODE -n -P $OTBOINIK_PID -u $OTBOINIK_USER -U $OTBOINIK_SOCKET_USER -G $OTBOINIK_SOCKET_USER $OTBOINIK_BIN
    
    [Install]
    WantedBy=multi-user.target


    3) Сам Go код
    import (
    	"net/http"
    	"net/http/fcgi"
    )
    
    type Server struct {
    }
    
    func (s Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
           // чиста пример
            jsonblob := r.FormValue("events")
    	if jsonblob == "" {
    		w.WriteHeader(http.StatusNotAcceptable)
    		return
    	}
    }
    
    func main() {
    	server := Server{}
    
    	func() {
    		fcgi.Serve(nil, server)
    	}()
    
    	waitchan := make(chan int, 1)
    	<-waitchan
    }
    Ответ написан
    4 комментария
  • Какие технологии использовать для отрисовки своих слоев поверх OSM?

    Moskus
    @Moskus
    Как-то из вас клещами подробности тащить приходится - какое количество объектов у вас планируется: сто, пятьсот, или пятьсот тысяч? Это ведь тоже важно, и ответ нужен вам, а не тем, кто вам будет отвечать...

    Если речь о том, чтобы выложить в сеть интерактивную карту с десятком объектов, то вам будет абсолютно достаточно взять Leaflet, начертить где угодно (например - в Google Earth) вашу схему, сохранить, подключить к карте на Leaflet (в случае KML понадобится плагин для Leaflet, их есть несколько, я пользовался тем что отсюда https://github.com/shramov/leaflet-plugins ) И будет вам счастье - маркеры, стили, popup-ы. Больше ничего не надо. Можно даже еще проще - выложить все на share.mapbbcode.org (аналогично старому гугловскому функционалу My Maps, только лучше).

    А вот если вам нужна система, где вы сможете хранить кучу данных в БД, переключать слои, видеть списки объектов и так далее, вот тогда вам понадобится хранить слои в PostgreSQL, держать установленный WMS-сервер (скажем, GeoServer), возможно - тайловый кэш к нему (TileCache) и чтобы за написанием веб-морды не повеситься, взять, например, https://geoext.github.io/geoext3/ (это OpenLayers интегрированный со всякими другими удобными вещами).

    Короче, определяйтесь с масштабом безобразия, а там можно будет и уточнить детали.
    Ответ написан
    7 комментариев
  • FastCGI-сервера приложений?

    Staltec
    @Staltec
    Node.js разработчик
    FastCGI - это протокол по которому проксирующий веб-сервер может передавать запросы внутреннему сервису и получать от него ответы, которые передаются пользователю.

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

    Нет понятий fastcgi-server, fastcgi application server, есть веб-сервер (например Nginx) и процессы (workers) работающие на определённый TCP портах и взаимодействующие с веб-сервером по протоколу FastCGI.

    https://ru.wikipedia.org/wiki/FastCGI
    Ответ написан
    Комментировать
  • Go IDE

    ali_aliev
    @ali_aliev
    Разработчик на Django/Python, JavaScript
    1 комментарий
  • Двухсторонний шаблонизатор?

    AMar4enko
    @AMar4enko
    Дело в том, что вы старательно пытаетесь игнорировать тот факт, что в требованиях пришли к single page application на JS. И пробуете найти какой-то подход, который оставит вас в рамках текущей парадигмы разработки.
    А решения уже придуманы давно и их очень много, можно выбирать на любой вкус. И все он заключаются в том, что на сервере шаблонизации нет вообще - там только данные.
    Все взаимодействие с фронтом через REST API.

    Единственное, что может вызвать проблему в этом случае - индексация такого приложения браузером. Но и тут есть решение, требующее минимального вмешательства в код сервера - вы просто делаете снэпшоты страницы, требующих индексации, например с помощью PhantomJS, после чего отдаете их как статику с сервера при запросе от бота.
    Ответ написан
    1 комментарий