Ответы пользователя по тегу MySQL
  • mysql автоинкремент

    dali
    @dali
    Не забудьте про транзакции, если вы используете транзакцию при записи в таблику, то автоинкрементное значение id уже зарезервировано за транзакцией, потом идет roll back, будет пропуск между id.
    Ответ написан
    Комментировать
  • Полнотекстовый поиск

    dali
    @dali
    Если говорить про Sphinx, то ему в качестве источника данных нужна БД (чтобы он с помощью sql вытащил данные) или xml (xml-pipes). То есть перед тем, как настраивать сфинкс, вам надо будет все ваши документы или записать в БД, или переконвертировать в xml. Тут можно несколько вариантов решения придумать, смотря что вам надо. Предположим, вам не нужен полнотекстовый поиск по документам, вы можете каждому документу назначить ключевые слова, тогда в xml вы можете записать ключевые слова и название документа, поиск осуществляется по ключевым словам, выдается документ. Ну или полностью вытаскивать текст из документов, ложить в БД (придумав структуру перед этим), осуществлять полнотекстовый поиск.
    Про объемы: 100-150 ГБ это конечно много, хотя возможно, когда вы вытащите текст из документов, объем подсократится, но не факт. Но учтите, что Sphinx строит индексы, а они займут минимум раза в три больше места. Поэтому диска нужно будет минимум террабайт и по возможности побыстрее.
    По железу: у меня есть поиск по 1ГБ таблице спокойно(и очень шустро) работает на 512 метрах оперативы на 1 ядре на хостинге под дебианом 5.5. Индексер можно ограничить потребление памяти, тогда он будет индексировать медленней. Но можно настроить, чтобы индексировал только то, что надо.

    А способов реализации много, но все зависит от того, что вам надо на выходе получить, как искать и что.
    Ответ написан
    2 комментария
  • Как вносить изменения в базу последовательно, т.е. выстраивать в очередь в определенном моменте?

    dali
    @dali
    эм. вы что делаете SELECT rating FROM users WHERE userid = :id, потом делаете rating++, потом делаете UPDATE users SET rating=:rating WHERE userid=:id? Во-первых, вы можете просто делать UPDATE users SET rating=rating+1 WHERE userid=:userid. Во-вторых, можете выстроить очередь. При изменении рейтинга в очередь ложить действие (+ или -), :userid, потом обработчик очереди сам сделает + или — над рейтингом очереди, но тогда пользователь не увидит мгновенного изменения рейтинга. В-третьих можно рейтинги пользователей держать в кэше, делать +- в кэше, показывать из кэша, а кэш синхронизировать с базой несколько раз в день или по какому-нибудь событию.
    Ответ написан
    1 комментарий
  • Как хранить несколько элементов справочника в поле?

    dali
    @dali
    Без разницы, MySQL или любая другая реляционная база данных. Нормализуется хотя бы до 3 нормальной формы. Все, как расписал JetMaster и savant.
    Ответ написан
    Комментировать
  • Mysql. Как выбрать строки в поле которого есть только цифры?

    dali
    @dali
    firstr_letter только один символ?
    протестируйте на скорость выполнения следующие конструкции:
    — WHERE first_letter IN (1,2,3,4,5,6,7,8,9,0)
    — WHERE first_letter REGEXP '[0-9]'
    Ответ написан
    Комментировать
  • события для данных в базе, какие есть способы?

    dali
    @dali
    как часто обновляется таблица с заданиями? после каждого обновления можно запускать php скрипт, который будет брать время заданий, отнимать 5 минут, писать в crontab задачи: время выполнения, послать на почту уведомление о задании. Если к кронтабу доступ не хотите давать, можно записывать в sh файл, а его подключить к крону.
    Это если сразу так навскидку. Сейчас еще подумаю )
    Ответ написан
    2 комментария