![]() |
MongoDB
Наверное буду время от времени задавать по ней вопросы...
Первый вопрос: Как оптимальнее перезаписать поле у всех записей таблицы? Хочу сбросить счетчик начисленного за неделю или за день опыта. Вообще если есть интересные мысли по организации такого топа то тоже прошу высказывать. Заранее спасибо! |
Ответ: MongoDB
Цитата:
Цитата:
PHP код:
Цитата:
И раздел "Web" не подходящий имхо, т.к. тут бд как угодно можно юзать. ЗЫ, сам юзаю mongodb для проекта сейчас (по работе), используем 2dsphere индексацию для гео-кординат, крутая штука. Советую также изучить как работают индексы, и тестировать запросы с использованием .explain() метода, чтобы посмотреть сколько времени запрос занял, какие индексы юзает и сколько листает и выдаёт записей. |
Ответ: MongoDB
Спасибо, сделал так же за исключением первого условия. Передам пустой массив. Язык PHP но это роли не играет особой. Про explain спасибо, возьму на заметку.
|
Ответ: MongoDB
Для оптимизации, проиндексируй collection по experience полю.
Далее в запросе можешь фильтровать: PHP код:
Для того чтобы убедиться в индексе, пропиши: PHP код:
Далее попробуй так: PHP код:
|
Ответ: MongoDB
Индекс там уже есть, а вот условие первое я значит зря убрал)
|
Ответ: MongoDB
Учти что если в фильтре больше одного условия, то индексы не совмещаются, бд выберет тот что считает наиболее подходящий. Можно иметь compound index, который совмещает разные поля (последовательность важна).
Также можно используя .hint() намеренно указать определённый index который ты хочешь использовать для query. |
Ответ: MongoDB
У меня условие было 1:1 твое)
|
Ответ: MongoDB
Еще одна задача: Хочется выводить игроку его примерное место среди всех игроков по какому-то параметру. Как бы это лучше провернуть? Из мыслей было сделать на каждый параметр запись в отдельную таблицу со всеми игроками сразу... т.е. получить сразу всю таблицу отсортированную в php, присвоить номера и записать в одну запись как массив. Потом делать по ней поиск. Но чет думаю может не правильно... Если игроков будет пару миллионов к примеру, то как такой скрипт отработает?
|
Ответ: MongoDB
Кешировать такие данные, будет в разы эфективнее, нежели запрашивать их каждый раз.
Чтобы получить их, тебе нужно посчитать число записей, у которых значение выше того что ты запрашиваешь. Например у тебя есть 5 записей, со значением фрагов: 2, 5, 7, 9, 15. Тебе нужно найти на каком месте находиться игрок с 9 фрагами: PHP код:
PHP код:
Но count это всё равно O(n) операция, следственно если ты запрашиваешь из 10к игроков кого-то с серидины, то бд нужно пролистать 5к игроков, чтобы их посчитать.. Даже с индексом, это всё равно относительно долго. Следственно имей отдельную collection позиций, и там всё очень тупо: _id, timestamp, frags Где _id будет такой же как и _id в collection самих player, timestamp - когда запись была обновлена в последний раз и frags - будет уже высчитанная позиция. И если запрашиваются данные о позиции, грузи их, если их нету или они устарели (я бы раз в день обновлял), то обнови, и выдай. Если же тебе нужны эти данные не по запросу а всегда, то тебе нужен cron job, что будет это делать периодически. |
Ответ: MongoDB
таблица рейтинга это хеш мап с ключем = очки, а место там это индекс бокса в который value попадет
проще чтобы сервер это хранил отдельно от монги, не уверен чтобы именно индекс бокса можно у монги получить, хотя внутри думаю всё и так на хешмапах |
Ответ: MongoDB
Внутри всё хешиться и весьма отлично. А вот про индекс, тут нет.
Получить позицию индекса нельзя, т.к. это не будет работать в случае с шардами баз данных, т.к. каждая из них будет иметь свой список хешей, и не будет знать о чужих списках, следственно посчитать позицию индекса не сможет. А большой упор в монго - это как раз шардинг. Поэтому это лежит на плечах самих разработчиков. Конечно можно иметь отдельный процесс, например мелкий node.js, в 50 строк. При запуске он будет загружать все данные и создавать все списки в памяти и их сортировать, затем периодически обновлять, и используя например ZeroMQ можно получать данные какие нужно от другого процесса, PHP или т.п. Делать подобного рода процесс в бд, я бы не стал, т.к. это semi-realtime данные, и оперировать и обновлять их будет в разы эфективнее в памяти на не в бд. |
Вложений: 3
нужен специалист по Mongobd помогите плиззб я делаю лабораторную работу, к информатике не имею ни какого отношения, что описано в этой функции
а что описывает это действие и это |
Ответ: MongoDB
Инфа по MapReduce тут: http://docs.mongodb.org/manual/core/map-reduce/
Вырванные методы из контекста - мало чего говорят. |
Ответ: MongoDB
Цитата:
|
Ответ: MongoDB
Запрос листает все закупки от разных пользователей, и подсчитывает сколько покупок сделал каждый пользователь и сколько средняя арифметическая стоимость всех покупок по каждому пользователю.
|
Вложений: 1
Ой спасибо что ответили, вот это мне и надо, только я не поняла это про какой именно мне надо столько про каждый.
а вот этот |
Ответ: MongoDB
А это как раз само содержание таблиц. Первая это содержание таблицы shopping (покупок), имеет свой ID; ID пользователя; дату и время покупки; и прибыль с покупки.
Во второй таблице же будет кеш (cache) результатов как раз прошлого mapReduce, и содержит уже ID пользовтеля; сколько всего заработали со всех покупок; сколько покупок; общее арифметическое (total_revenue / count). Этож как нужно и вообще зачем учиться, если что-то учить и не понимать нихера? Используй кнопку "Правка" чтобы редактировать прошлые посты а не даблпостить. |
Ответ: MongoDB
Я извеняюсь за беспокойство, я учу Экономику в университете Германии и предмет называется Информационный менеджмент, причем сдесь програмирование.............. сама (и) в шоке, но надо для допуска к экзамену. Если что могу удалить все свои сообщения
|
Ответ: MongoDB
Да не удаляйте, нормально всё. Как вы наш форум то нашли?
|
Ответ: MongoDB
на второй день, после безрезультатной попытки понять что-либо самой, друзья програмисты тоже не помогли, Надеюсь что Google поможет. Просто забила "Moongobd помогите"
|
Ответ: MongoDB
Повезло что я работаю с MongoDB.
Учиться нужно как полагается.. |
Ответ: MongoDB
Как правильно отключить журналирование? Сейчас файлы журналов жрут лишних 3 гб места на жестком, мне они нужны, а журналы не нужны.
Отключил, в конфиге прописал journal = false и удалил файлы журнала. |
Ответ: MongoDB
Учти, без journal, если процесс завершиться по не предвиденным обстоятельствам, то возможна потеря самых последних данных (а порой и хуже), при попытки починки бд.
|
Ответ: MongoDB
На тестовом сервере это не страшно
|
Часовой пояс GMT +4, время: 04:56. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot