Задать вопрос
  • Как поделить большую таблицу личных сообщений?

    @TimTowdy
    MyISAM для таких объемов выбрасывайте нафиг. Во-первых блокировки, во-вторых надежность. Внезапно упадёт сервер — и наслаждайтесь REPAIR TABLE на ваших 100М записей. Планируйте миграцию на InnoDB. Ругани в сторону MyISAM в хайлоаде всегда хватало, вот, почитайте.

    select * from msg where to_id = USER_ID and status='new';
    Нужен ли вам вывод всех сообщений за раз? Сделайте постраничную навигацию, как минимум с LIMIT x,y. А по возможности — кнопки вперед/назад и выборки по индексу. Идею можете почерпнуть отсюда.

    Выбрать несколько сотен строк по индексу — не такая уж большая проблема для любой БД. Вы упираетесь либо в блокировки, либо в винт. Так или иначе, скорость должна меняться под нагрузкой. Включите профайлинг, посмотрите как меняется скорость выполнения запросов днем/ночью.
    С блокировками поможет InnoDB, с винтом — масштабирование, как вертикальное, так и горизонтальное. С горизонтальным в mysql сложнее, чем во многих nosql, можете начинать посматривать на них.
    Если хоститесь в облаке — можете для сравнения попробовать реальное железо. У большинства облачных провайдеров, винты — узкое место.

    Ну и status лучше хранить как tinyint, чуток уменьшит размеры индекса (хотя может у вас там enum, тогда не обязательно).
  • Как поделить большую таблицу личных сообщений?

    @TimTowdy
    Была мысль вынести некоторые поля в другую таблицу
    В смысле и архивацию и денормализацию(кажется это так называется)

    Это как раз процесс обратный денормализации. Вместо прироста производительности получите дополнительный JOIN и, как следствие, дополнительный random seek.
    Что касается архивации — вы для начала выясните откуда берутся тормоза. Архивация поможет только при полных выборках, (вместо них делайте постраничный вывод), либо при неиспользуемых индексах (explain делали?).
  • Как поделить большую таблицу личных сообщений?

    @TimTowdy
    Это СИЛЬНО уменьшит основную таблицу по которой идут выборки, как следствие даст прирост скорости, и выборки и вставки и перестроение индексов — все будет резвее на малом объеме.

    Глупости. Размер индекса (количество сообщений) не меняется — скорость перестроения индекса тоже. Отчасти это может помочь в случае кластерного индекса, но не в данной ситуации (обновлений индексного поля нет, данные на диске не перемещаются). Уменьшение таблицы даст толк либо при fullscan, либо при малом размере таблицы, чтоб она полностью помещалась в кэш. Ни то, ни другое, в данном случае не верно. Разделение таблицы увеличит в два раза количество random seek для извлечения данных — отличная анти-оптимизация.
    Если сообщения хранятся как TEXT — их нет смысла хранить в другой таблице, они и так будут лежать отдельно от основных данных.
  • Странные запросы в логах Апача?

    @TimTowdy
    Ну так в логах же для 200 статуса длина ответа 4892. По крайней мере теперь можно быть уверенным, что сервер вернул именно главную страницу.
    Можете неткатом попробовать воспроизвести запрос (возможно в конец нужно добавить перевод строки — \x0a):
    echo -e ";\xaf\x7f]\x19\xf0\xdd\xcf\xf8\x04@$\xb1" | nc localhost 80
    
  • Странные запросы в логах Апача?

    @TimTowdy
    Браузер отправит валидный HTTP-запрос, с методом, заголовками и т.д. Вам же приходят «сырые» двоичные данные на 80 порт, не по HTTP. Почему вместо 501 Not Implemented сервер отвечает 400 или даже 200 для меня загадка, возможно это особенности настроек определённого апача. В любом случае, не думаю что это эксплоит.
  • Объединить несколько результатов MySQL запроса в один

    @TimTowdy
    Вы хотите получить отказоустойчивость, но изначально выбрали неправильный путь. Нужна отказоустойчивая база данных — делайте отказоустойчивую базу данных. Если будете пытаться решать проблемы с базой на уровне приложения — получите уродливую архитектуру и кучу геморроя.
  • Объединить несколько результатов MySQL запроса в один

    @TimTowdy
    просто есть резервный сервер, а есть основной они физически в разных местах.
    В случае падения основного, начинает работу резервный (плюс он в кластере вообще), в итоге данные в момент работы резерва на него и пишутся очевидно, и они важны клиентам, и их нужно как то выдать вместе с данными с основного сервера.
    Судя по этому описанию — именно она вам и нужна. Не понимаю в чём смысл хранить отдельно данные, которые пришли во время сбоя, и которые пришли в штатной ситуации, а потом при запросе их объединять. Делайте мастер-мастер и падение одного сервера никак не скажется на работе системы.
  • Объединить несколько результатов MySQL запроса в один

    @TimTowdy
    Про репликацию сомнительно, там могут пересекаться id полей соответственно не ясно как их объединить корректно.
    Настройте правильно, тогда пересекаться ничего не будет:
    dev.mysql.com/doc/refman/5.0/en/replication-options-master.html#sysvar_auto_increment_increment
  • система тегов на MongoDB

    @TimTowdy
    По одному тэгу можно и проще:
    db.posts.find({tags:'nosql'})
    

    Монго сам поймёт что для массива подразумевается поиск элемента.
  • система тегов на MongoDB

    @TimTowdy
    Если выборка частая, запускать MapReduce на каждый мелкий запрос я бы не рекомендовал — он для этого не предназначен, т.к. медленный и прожорливый.
    Для тэгов вряд ли имеет значение порядок элементов, поэтому возможно есть смысл хранить их в хэше, а не массиве. Либо заранее обеспечивать уникальность тэгов в списке.
  • Можно ли обойтись без Entity-Attribute-Value?

    @TimTowdy
    Всё зависит от конкретной nosql и конкретных данных. В большинстве случаев, будет как минимум не медленнее.
    Если нужна гарантированная скорость — посмотрите в сторону фасеточного поиска с помощью Sphinx или Lucene/Solr. Реализация будет не самой удобной (хотя возможно уже есть какие-нибудь красивые обёртки), но скорость — на порядок выше. Но учтите, что поиск в этом случае делается по заранее заданным диапазонам — запрос вида «цена от 42.34$ до 123.45$» сделать не получится.
  • Как ограничить количество воркеров MongoDB?

    @TimTowdy
    Если весь проект на одном VDS — о монго не стоит даже и думать. Он не рассчитан на работу без репликации — single server durability появится только в 1.8, и даже после этого крайне не рекомендуется запускать его на одном сервере.
  • MySQL + Mac, не хочет запускаться сервер?

    @TimTowdy
    Угу, вспоминается винда, которая уходила в бесконечный цикл перезагрузок после очередного обновления. И это было уже не один раз.
    Ну вот как может получиться, что официальное обновление для операционки от майкрософта посылает компьютер в бесконечную перезагрузку? Как? Они их не проверяют? Гы.
  • Удалённый доступ к информации

    @TimTowdy
    на дропбоксе больше 100Гб не взять
    Если написать в саппорт — думаю вполне можно взять и больше.
  • Вопрос о рекурсии в JavaScript

    @TimTowdy
    Зачем комментировать, если сам не разбираешься?
    Точка с запятой в данной ситуации ни на что не влияет, она вставляется автоматически, читайте стандарт. Из-за того что х1 не определена, никто не куда не обвалится, просто х1 будет глобальной.
  • Что у FireFox с памятью и как это лечить?

    @TimTowdy
    1. Что значит отжирают память? Файловый кэш под виндой может «отжирать» гигабайты. Но он не забирает эту память у других приложений. С файрфоксом, с большой долей вероятности, то же самое. Если вас смущают циферки в Task Manager — ставьте аддон. Циферки изменятся, но реально памяти фф будет кушать столько же сколько и раньше (и это количество мало связано с тем, что показывает Task Manager).
    2. Почему эта ссылка — говно, в том посте написал homm. А вы учите матчасть — память, которая показывается в Task Manager, не отображает реальное использование памяти.
  • Что у FireFox с памятью и как это лечить?

    @TimTowdy
    Вы статью-то читали? От этого «хака» толку ноль.