Я начал изучать MongoDB 2-3 дня назад, и я очень доволен этим :)
Однако ... У меня есть некоторые вопросы ... Я уже провел некоторые исследования, и они не особо прояснили ... Я занимаюсь разработкой браузерной игры, и все базы данных были в MySQL, но я решил перейти на MongoDB. Но, ну, к вопросам.
1) В MySQL раньше у меня была таблица map , в которой были поля * map_ndx *, column , row, terrain (terrain был внешней ссылкой на таблицу terrain). По сути, каждый * map_ndx * указывает свою карту, а строка и столбец представляют их координаты; Ландшафт обозначает как «лес», «пустыня», отнесенные к другой таблице. Теперь на MongoDB у меня есть коллекция map , которая имеет поле * map_ndx * и встраивает несколько плиток . Каждая плитка имеет поля col и row и встраивает ландшафт . Прежде всего, вы думаете, этот дизайн эффективен для карты? Я сделаю много запросов, например, для поиска «tile (x, y) на карте z»). Во-вторых, где я могу разместить свои индексы (например, строка и столбец )? Поместить ли я их в коллекцию tile или в коллекцию map (например, с использованием индекса index.ile.row)? Я спрашиваю об этом, потому что на MySQL, когда я запрашивал «выбрать * из карт, где map_ndx = 1 и row = 1», у меня был бы ответ немедленно. В MongoDB, если я запрашиваю «Map.where (: map_ndx => 1) .first.tiles.where (: row => 1)», это займет почти секунду (обс .: синтаксис существует для RoR, Я работаю с mongoid )
2) В MySQL у меня раньше была таблица * global_units *, в которой было бы описание нескольких юнитов, их атак, защит, затрат и т. Д. И у каждого игрока было бы * user_units *, который ссылается на * global_units * и сообщает количество юнитов, которые игроки имели для этой ссылки * global_unit *. Теперь, на MongoDB , я рассмотрел встраивание * user_units * в коллекцию user , что кажется идеальным. Однако следует ли мне * user_units * только ссылаться на * global_units *, или было бы лучше, если бы * global_unit * был также встроен в коллекцию * user_units * каждого игрока? Проблема в том, что мне нужно было бы получить доступ к юнитам из * global_units * в других местах, например, когда игрок собирается их построить. Следовательно, даже если бы они были встроены в коллекцию * user_units *, мне также потребовалась бы эксклюзивная не встроенная коллекция * global_units *, чтобы я мог получить доступ к их информации в других местах. Какой самый лучший выход здесь?
Я знаю, что это очень конкретные вопросы, но я был бы рад, если бы кто-то разъяснил мне их!
Заранее спасибо,
Фернандо.