Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.11.2012, 14:30
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 1  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
По умолчанию MongoDB

Здравствуйте форумчане.
Обращаюсь к тем кто уже работал с данной базой данных. Интересует вопрос на который я не смог найти ответа прогуглив интернет.
Можно ли создавать коллекции внутри коллекций?
Востребованная структура данных:
PHP код:
  $uid 1;
  
$m = new Mongo();

  
$db $m->TestDataBase;

  
$User $db->User;

  
$user = array( 'uid' => $uid'time' => time(), 'coord' => array("x"=>1,"y"=>2,"city"=>"Kiev"));
  
  
$User->save($user); 
Задача состоит в выборке дочерних элементов.
На примере нужно получить название города пользователя с
PHP код:
$uid 1
Самой простой реализацией будет выборка массива 'coord' с последующей выборкой значения 'city'. Но зачем выбирать весь массив если нам нужен всего-лишь 1 элемент.
Как добиться структуры хранения данных так, что бы можно было напрямую выбрать значение 'city' из массива 'coord'.

Размышление:
Предположительно думаю создавать не вложенные коллекции. То-есть имеется коллекция 'User' и 'coord'.
Тогда запись будет происходить так
PHP код:
$user = array( 'uid' => $uid'time' => time(), 'coord' => $MongoID
где
PHP код:
$MongoID 
индекс коллекции 'coord' с нашими данными, но отсюда напрашивается вопрос: на сколько это эффективно? Как быть с больший объемом данных (множество записей 'coord').

Буду признателен в оказанной помощи в любой доступной форме, ссылки, мысли, готовые решения.
__________________
return this...

Старый 01.11.2012, 16:35
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Не очень понятно, почему вы храните в юзерской коллекции и координаты и город. т.е. все в одной коллекции. Зачем?
Напрашивается разделить:
Коллекция Users - объекты с полями id, city_id и тд.
Коллекция City- объекты с полями id, name, coord и тд., где coord - тоже объект вида {x,y}.
зная id юзера, узнаем id его города, легко находим нужный город в соответствующей коллекции.
Обычная реляционная модель, как бы. Коллекции в монго - аналог таблиц реляционных ДБ, "под-таблицу", т.е. подколлекцию создавать нельзя.

Старый 01.11.2012, 17:21
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 3  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Этот код я использовал для наглядности примера, на самом деле у нас есть пользователь, у которого есть н-блоков (объектов), у каждого объекта может быть н-объектов и так еще раз. Хотелось уйти от модели создания коллекции "Блоки" где хранить все блоки трех уровней так как их количество растет в геометрической прогрессии. При использовании запрашиваемой схемы выборка происходила б в разы быстрее, так как сортировка/выборка массивов происходила на уровне коллекции конкретного пользователя. Вместо того что бы производить поиск среди всех имеющихся блоков. Грубо говоря, если пользователь имеет шесть объектов, внутри которые содержат еще шесть объектов, которые в свою очередь имеют еще шесть объектов, то выборка перебором происходила по ключу родителя объекта, то-есть к примеру, Объект2->Объект1->перебрать все объекты. Но на сколько я понял это не возможно и выборка будет происходить по схеме Объекты->перебрать все объекты с ключами Объект2->Объект1
__________________
return this...

Старый 02.11.2012, 09:08
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 4  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Еще можно использовать нормальную БД Проиндексированную

Старый 02.11.2012, 11:43
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 5  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Было использовано MySQL но при 600 одновременных посетителях MySQL перегружался, потому решили перейти на более оптимальную базу данных, на сколько я знаю mongoDB индексированная база?? Покрайней мере индексы создать там можно + есть такая штука как шардинг которая позволяет группировать данные по шардам. Вопрос конечно еще до конца не изучен но на сколько мне известно mongoDB одна из лучших объектно-ориентированная база данных на сегодняшнее время. Больше всего нравиться поддержка BSON что позволяет соединять flash->amfphp->mongoDB без каких либо конвертаций, то-есть передавать целые объекты из flash прямо в mongoDB.
__________________
return this...


Последний раз редактировалось AlexCooper; 02.11.2012 в 19:24.
Старый 02.11.2012, 12:52
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 6  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
Цитата:
Сообщение от AlexCooper Посмотреть сообщение
Было использовано MySQL но при 600 одновременных посетителях MySQL перегружался, потому решили перейти на более оптимальную базу данных, на сколько я знаю mongoDB индексированная база?? Покрайней мере индексы создать там можно + есть такая штука как шардинг которая позволяет группировать данные по шардам. Вопрос конечно еще до конца не изучен но на сколько мне известно mongoDB одна из лучших объектно-ориентированная база данных на сегодняшнее время. Больше всего нравиться поддержка JSON что позволяет соединять flash->amfphp->mongoDB без каких либо конвертаций, то-есть передавать целые объекты из flash прямо в mongoDB.
Странное поведение. Оптимизацию вы проводили?
шардинг есть и в mysql, начиная с 5.1, только называется не так
Но если вам важна именно заточенность mongoDB, и она подходит под вашу специфику, то она лучше в этом отношении mysql-я.
Хотя да и сравнивать их не стоит, разные все же БД. Индексы там есть, нету других вещей.

Старый 02.11.2012, 13:20
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 7  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от Krusty Посмотреть сообщение
Странное поведение. Оптимизацию вы проводили?
Оптимизацию как раз и проводим. По совету некоторых специалистов пришли к mongoDB, нравиться то что нет шаблона для структуры данных. Из минусов конечно выборка очень страдает, нет всех этих %LIKE% и всего остального. Потому сейчас хочу изучить вопрос достаточно широко и определить курс по дальшей разработки.

Цитата:
Сообщение от Krusty Посмотреть сообщение
шардинг есть и в mysql, начиная с 5.1, только называется не так
можно поподробней
__________________
return this...

Старый 02.11.2012, 16:22
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 8  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Цитата:
%LIKE%
???
Не мудрено что у вас мускул закряхтел
Три раза пытался перейти на монго, и снова возвращался на мускул.
Посмотрите в сторону percona-server - это модифицированный мускул. Возможно, оптимизировать мускул будет проще, чем перейти на новую технологию.

Старый 02.11.2012, 16:58
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 9  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
Цитата:
Сообщение от AlexCooper Посмотреть сообщение
Оптимизацию как раз и проводим. По совету некоторых специалистов пришли к mongoDB, нравиться то что нет шаблона для структуры данных. Из минусов конечно выборка очень страдает, нет всех этих %LIKE% и всего остального. Потому сейчас хочу изучить вопрос достаточно широко и определить курс по дальшей разработки.


можно поподробней
партицирование это называется.
Вы не туда пошли. Если у вас поиск - %LIKE%, если что, индексы не может использовать просто по определению. Это просто из строения индекса следует. Вам обязательно нужно смотреть на Sphinx для текста, и смотреть, какие у вас запросы и задачи.
А percona тут вообще никаким боком не нужна, это только для транзакционных схем работы имеет смысл переходить, это не тот случай явно.

Старый 02.11.2012, 19:21
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 10  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от Krusty Посмотреть сообщение
партицирование это называется.
Прокомментируйте пожалуйста это
Sphinx это следующий этап оптимизации, плюс я думаю будет реализована еще связка Node.js с long-poll, memcache и железом SSD-диски которые помогут дышать серверу но начало идет от архитектуры и самой БД.
__________________
return this...


Последний раз редактировалось AlexCooper; 02.11.2012 в 19:37.
Создать новую тему Ответ Часовой пояс GMT +4, время: 11:23.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 11:23.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.