• БД для хранения сообщений чата, какую выбрать?

    @InoMono
    Вполне себе любая развитая современная РСУБД годится для этой задачи.
    MySQL, PostgreSQL...

    А по мере роста нагрузки - тут не выбором СУБД нужно заморачиваться, а MQ-сервер ставить. Он гораздо легче сравиться с бешенными нагрузками.

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

    Из самого критично подозрительного - полнотекстовый поиск.
    Впрочем, полагаю, что полнотекстового поиска средствами MySQL или PostgreSQL вплоне хватит.

    Если уж делать прям таки серьезный чат типа Slack, то для полнотекстового поиска я бы вообще отдельную специализированную БД держал бы. Например, SphinxSearch.

    Но, для начала, возможностей PostgreSQL или MySQL будет вполне достаточно.

    Что до Mongo... Если вам не нужна репликация без консистентности. Зато быстрая...
    Так вот если вам не нужна такая репликация, то Монга вам не нужна.

    РСУБД будут существенно быстрее.

    Вот ежели вы планируете заводить ваш чат в кластер, когда одного сервера вам не хватит, то тут да, тут РСУБД не лучший выбор. Тут бы я рекомендовал как раз Монгу.
    Но опять таки кластер серверов для чата вы без MQ не сделайте.

    Вывод:

    Начните с обычной РСУБД.
    Как начнутся затыки - рассмотрите MQ
    Как начнется рост до масштаба планеты - рассматрите Монгу.

    Вся система работает с бд MySQL - InnoDB, сообщения пишутся в бд при каждой отправке (INSERT), пока сервис еще не запущен, сообщений мало (только мои тестовые) все работает шустро, но вот когда запущу и количество сообщений перевалит за несколько миллионов, что будет тогда с моей бд? Начнутся жесткие тормоза при select и insert?


    Вам никто не мешает это проверить.
    Сгенерируйте миллион случайных сообщений.

    При грамотном использовании индексов - ровным счетом никаких проблем ни на миллионах ни на миллиардах записей.
    Ответ написан
    15 комментариев
  • На каких этапах стоит комитить код?

    @0x131315
    Я обычно под отдельную задачу создаю свою ветку, и пилю спокойно задачу в ней. Это позволяет не портит основную ветку незаконченными задачами.
    А в коммиты сливаю отдельные фичи задачи. Это позволяет коммитам быть наглядными, позволяет быстро искать реализацию фич в истории, и позволяет безопасно и быстро откатывать фичи, если больше не нужны.

    Комитить каждую строчку бессмысленно, а коммитить огромные куски кода черевато большими проблемами, особенно при конфликтах.

    Ежедневные/ежемесячные коммиты - это вообще жесть.
    Git - это история, каждая запись в ней должна иметь смысл.
    Ответ написан
    Комментировать
  • Нужно вывести числа в заданном диапазоне. Почему выводит результат не при всех задаваемых значениях?

    AngReload
    @AngReload
    Кратко о себе
    Это конечно говнокод, но ошибка только одна:
    var n = prompt('введите начальное число диапозона', '0');
    var k = prompt('введите конечное число диапозона', '0' );

    prompt возвращает строки а не числа, поэтому нужно конвертировать в число, например так:
    var n = parseInt(prompt('введите начальное число диапозона', '0'), 10);
    var k = parseInt(prompt('введите конечное число диапозона', '0' ), 10);

    через Number или parseInt.

    Вообще, полезно знать разницу при сравнении чисел и строк:
    9 < 10 // true
    '9' < '10' // false
    Во втором случае получается «ложь», потому что строки сравниваются по кодам символов, начиная с первого символа, те '9' < '1'. Смотрим коды символов:
    '9'.charCodeAt(0) // 57
    '1'.charCodeAt(0) // 49
    57 больше 49, поэтому сравнение заканчивается, выдавая значение false.
    Поэтому условие цикла n <= k работает не как ожидается.
    Ответ написан
    1 комментарий
  • Какие варианты принятия оплаты на сайте для физлица можете посоветовать?

    Onnem
    @Onnem
    Финансовый клерк
    Посмотрите среди платёжных агрегаторов, кто работает с физлицами, решение этого вопроса есть. Здесь этот вопрос тоже задавался не однократно и решения указывались.
    Плюс есть ещё Яндекс Деньги и Киви, где платежи можно принимать на свои верифицированные кошельки картами и с кошельков, будучи физлицом, а потом переводить себе на карту либо заказать у них карту к кошельку. Но там другие нюансы.
    Ответ написан
  • Как в сбербанк эквайринг добавить корзину для чеков на обычном php?

    tseries
    @tseries Автор вопроса
    Ответ прост:

    ['orderBundle'] массив нужно превращать в json.

    $zaraza[] = array(
    	'positionId' => '1',
    	'name' => 'something stuff',
    	'quantity' => array(
    		'value' => 1, 
    		'measure' => 'st'
    	),
    	'itemAmount' => $sum * 100, // возвращаемая сумма
    	//'itemCurrency' => 643,
    	'itemCode' => 'z-xc', // код продукта
    	'tax' => array(
    		'taxType' => 0
    	),
    	'itemPrice' => $sum * 100
    	);
    $zaraza2 = array (
    	 'cartItems' => array('items' => $zaraza)
    );	
    
    $requestpay[ 'orderBundle' ] = json_encode($zaraza2); // ВСЯ ФИШКА ЗДЕСЬ


    Но также стоит отметить, что нельзя ошибаться в значениях полей.
    Ответ написан
    Комментировать
  • Как сделать вызов JS функции при проверке php post запроса?

    @vism
    Оберни свой говнокод в документ рэди и всё заработает.
    Ответ написан
    Комментировать
  • Какую базу данных выбрать для типичного тестового задания на вакансию java разработчика?

    @1001001
    Сделать скрипт, который развернет базу, если необходимо сгенерирует данные.
    Ответ написан
    5 комментариев
  • Отличия локального сервера от хостинга?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    Софт одинаковый везде.
    Настройки разные, версии разные.

    OpenServer это не программа, это просто пачка разного софта в упаковке.
    Хостинг это тоже всего лишь компьютер с тем же софтом, а не какая-то магическая штука/программа.

    В общем курите гугл что и как. Пока у вас не будет представления об этом.
    Ответ написан
    1 комментарий
  • Как ускорить вёрстку?

    Bastax13
    @Bastax13
    Как минимум - использовать SASS.
    Как максимум - пригласить еще несколько человек и использовать SASS.
    Ответ написан
    Комментировать
  • Как заставить 2 и более серверов "работать" на один сайт?

    @silverjoe
    Системный администратор в связке с разработчиками вполне может это сделать.
    1. Поставить nginx для балансировки
    2. Размножить сервер на две ноды
    3. Решить вопрос с БД - там или ее перемещать на отдельный сервер или делать связку один мастер - две реплики на нодах. Запись только в мастер, чтение с реплик.

    Делов то :)
    Ответ написан
    Комментировать
  • Как реализовать формы на сайте с возможностью электронной подписи?

    @res2001
    Developer, ex-admin
    Почитайте в конце концов про ассиметричную криптографию и PKI.
    В общем в кратце так, хотите с клиентами юридически значимый электронный документооборот - подписываете с каждым соглашение, что стороны соглашаются считать собственноручной электронную подпись сделанную с помощью такой-то технологии.
    Технология при этом может быть различная. Довольно простой и легкий вариант - PGP, это не PKI, но довольно близко.
    Каждая сторона генерирует себе пару ключей (секретный/публичный), публичный ключ передается противоположной стороне. С помощью соответствующего софта файлы подписываются и отправляются второй стороне.
    Тут важно, что каждый из участников сам генерирует себе ключи и приватный ключ никому никогда не передается.
    Именно по такому принципу работают большинство банков, только они обязаны использовать отечественную сертифицированную криптографию (CryptoPro, КриптоКом ...).

    Если перейти на PKI, то добавляется еще один персонаж - центр сертификации (ЦС). Каждая сторона, после того как сгенерирует ключ отправляет запрос на сертификат в ЦС и получает от него сертификат. Сертификат, это по сути публичный ключ, подписанный на ключе ЦС с различными ограничениями. Например есть ограничение на срок использования сертификата.

    Точно не уверен, но вроде как в нашей стране нельзя использовать западную криптуху по закону, поэтому лучше сразу ориентироваться на отечественный софт. Например не плохой вариант CryptoPro+КриптоАРМ. Отечественная стоит денег.
    Если спросите, а что насчет SSL - там же сплошь западные алгоритмы, не сертифицированные, отвечу - в законе есть специальные оговорки про это, смысл в том, что если не возможно удалить из ПО поддержку западных алгоритмов, то можно. Но применительно к документообороту это не притянуть.
    Ответ написан
    1 комментарий
  • Обработка нажатий кнопок?

    maximglobak
    @maximglobak
    iOS developer
    Если делать через код, то создаешь кнопку и далее привязываешь действие к ней.
    UIButton *button  = [[UIButton alloc] init];
    [button addTarget:self action:@selector(pushButton:) forControlEvents:UIControlEventTouchUpInside];

    и дальше создаешь метод pushButton (тот что указан в action)
    - (void)pushButton:(id)sender{
    //code 
    }


    Если ты делаешь через сториборд, то
    - (IBAction)refresh:(id)sender{
     //Code
    }


    нажми ПКМ на кнопку и перетащи на эту функцию или на пустой код и в появившемся окне выбери Action и xcode сам создаст аналогичную функцию
    Ответ написан
    Комментировать
  • Насколько небезопасно делать функции-обертки для запросов в БД на JS?

    riky
    @riky
    Laravel
    просто учитывайте что любой пользователь системы может делать любые апдейты/удаления любых сущностей. тк сомневаюсь что у вас на сервере эти функции сейчас проверяют права доступа.
    поэтому вопрос выраждается в "насколько критично, что любой юзер может удалять/менять что угодно в системе?". на этот вопрос думаю сами можете ответить.
    Ответ написан
    Комментировать
  • Какую структуру звуковых файлов лучше всего сделать на сайте?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    10к в одной папке может быть проблемой. Я бы раскидал по дереву папок, скажем, по сотням от 0 до 20, и числам:

    1234 => /12/34/ => и там пять файлов
    0001 => /00/01/
    2000 => /20/00/

    У себя в одном проекте я организовал примерно похожую структуру папок, но чуть усложнил – т.к. число папок не равномерно для разных корневых папок, я зеркалирую порядок битов в каждом номере, и бью на уровни по шестнадцатиричным буквам:
    число  двоичное        наоборот        hex  папка
    0001   0000 0000 0001  1000 0000 0000  800  /8/0/0
    1234   0100 1101 0010  0100 1011 0010  4B2  /4/B/2
    0173   0001 0111 0011  1100 1110 1000  CE8  /C/E/8
    2000   0111 1101 0000  0000 1011 1110  0BE  /0/B/E
    Так в каждом уровне папок у вас будет не более 16 подпапок.

    А ещё, может быть, вы не делаете предзагрузку звуков? Стоит начинать скачивать звуковой файл сразу, как становится ясно, или вероятно, что он понадобится. Чтобы на момент начала воспроизведения файл уже был загружен.
    Ответ написан
    Комментировать
  • Можно ли отдельно написать программную часть на java и отдельно "верстку" на Android?

    svd71
    @svd71
    Можно слушать кучу советов, как удобнее превратить явовский фреймворк в функциональное программирование под виндовс, но лучше этого не делать.

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

    Создаете классы с бинеслогикой, можете как опцию добавлять тестюниты для проверки нормального функционирования этой логики. Отладку можно вести даже в консоли. После этого можете к созданным объектам цеплять любые графические изыскания.
    Ответ написан
    3 комментария
  • Зачем нужна нормализация БД MySQL?

    @avikb
    При разработке нормализованной или денормализованной базы размер HDD играет последнюю роль.

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

    Нормализуя данные вы перекладываете часть логики проверки данных на СУБД, такие как консистентность и (частично) корректность. То есть уже на уровне вставки/изменения данных вы не можете не заполнить обязательное к заполнению поле или изменить поле в одной таблице, но забыть (или неправильно изменить) в другой (консистентность), вы не можете в поле date внести не дату, а в в поле int не int (корректность) и вы не можете удалить запись, если есть записи, которые на неё ссылаются (консистентность).

    Нормализованное состояние БД это идеальное состояние базы, денормализацию нужно делать только если без неё никак не удаётся достичь нужных результатов (при условии, что вы разбираетесь как работает СУБД, как выбираются данные, индексы, сортируются и ищутся пересечения), если для вашей системы достаточно одного сервера, то в 99% случаев денормализация данных вам совершенно не нужна и противопоказана.
    Проще говоря - если вы не знаете зачем нужна нормализация, то вам однозначно она нужна.
    Ответ написан
    Комментировать
  • Зачем нужна нормализация БД MySQL?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Нормализация нужна для борьбы с избыточностью. т.е. данные не дублируются и связаны только внешними ключами.
    Видимо это было очень важно когда размер HDD был 10 мегабайт. Текущая практика показывает, что полностью нормализованная база работает очень медленно, т.к. обледенения данных это дорогая операция. Так же вы верно подметили относительно роста сложности запросов.
    Однако в нормализации обновляемых данных есть и жирный плюс, вам не надо обновлять/удалять и вставлять, одни и те же данные в куче таблиц. Ведь это тоже сложно, держать в голове всё, что нужно обновить, что приводит к ошибкам. Также решает вопросы сложности разгуливания операций изменения данных когда операция прошла не полностью.

    Поэтому оптимальность где то посередине.

    Так же не забываете, что нормализованные таблицы гораздо проще проецировать на модели в языках программирования.
    Ответ написан
    Комментировать
  • Зачем нужна нормализация БД MySQL?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    сухо тут
    поинтереснее тут 6-7я лекция

    если кратко - чудесов не бывает, при JOIN память поедается только при JOIN, а без нормализции - всегда

    компьютеру на кучу таблиц - пофиг, он вообще ничего кроме нулей и единиц не видит
    Ответ написан
    Комментировать
  • Сколько максимум строк можно содержать в таблице без больших потерь скорости выборки из нее?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Количество не играет роли.
    Играет роль:
    1) Влезают ли индексы в отведённую для них память.
    2) Хватает ли IO на диске для записи данных.
    3) Хватает ли процессора для перестройки индексов.

    Соответственно когда один из этих параметров исчерпывается, производительность проседает.
    Ответ написан
    Комментировать