CodeNet - все для программиста!CodeNet - 10 лет - мегавстреча!
Все для программиста!
  Статьи   Форум   Исходники   Каталог   Хостинг   IRC  
 Справочник функций

Ваш аккаунт

Логин:
Пароль:

Забыли пароль?
Регистрация

Почтовая рассылка



Подписчиков: 6553
(Из них RSS: 0)

Последний выпуск: 22.06.2010
Старый 19.07.2009, 10:26   #1
ruFog
Начинающий
 
Регистрация: 18.12.2006
Сообщений: 6
Вес репутации: 0
ruFog is an unknown quantity at this point
По умолчанию Архитектура базы и приложения

Здравствуйте!

Я разработал небольшой сайт с базой данных товаров города. Изначально сайт был адаптирован под местного покупателя - все данные о товарах и учетные записи зарегистрированных пользователей хранятся в одной базе данных. Количество одновременно существующих в базе данных товаров ~15000 для нашего города. Причем сайт позволяет очень гибко фильтровать и сортировать товары и эти операции составляют моё конкурентное преимущество. Но есть и обратная сторона медали - такие запросы с одновременной сортировкой и фильтрацией по нескольким критериям достаточно "тяжелы" для MySQL (я на данный момент не использую кеширование). В настоящий момент наша команда намерена развивать этот проект в соседних городах. Я бы хотел реализовать гибкую масштабируемую базу данных, но не имею представления как это сделать лучше.

Возможно лучше будет сделать для каждого города отдельную базу данных + иметь некое отдельное хранилище пользователей (один раз зарегистрировавшись пользователь может размещать объявления о товарах в разных городах, т.е. в разных базах данных).

Как придуманную мной модель реализовать на практике представляю себе слабо. Может быть не стоит вобще заморачиваться, если число записей не будет превышать полумилиона, а просто грамотно прикрутить кеширование? Хотелось бы услышать совета профессионала. Самому не доводилось работать с крупными проектами. Заранее благодарен.

PS: вот штатный запрос в mysql для:
Код:
SELECT * FROM `ndvbase` WHERE ndvbase.CITY=:p1 AND ndvbase.TYPE=:p2 AND ndvbase.ONLYFORUSERS=:p3 AND ndvbase.POSITION_DISTRICT IN (:p4) AND ndvbase.NUM_OF_ROOM IN (:p5) AND ndvbase.STATE IN (:p6,:p7) AND ndvbase.PRICE>=:p8 ORDER BY ndvbase.CREATED_AT DESC,ndvbase.RANK DESC LIMIT 840, 20
MYSQL5.1
ruFog вне форума   Ответить с цитированием
Реклама
Старый 19.07.2009, 16:12   #2
squirL
Пенсионер форума
 
Аватар для squirL
 
Регистрация: 13.08.2003
Адрес: Одесса/Киев
Сообщений: 4,740
Вес репутации: 66
squirL is just really nicesquirL is just really nicesquirL is just really nicesquirL is just really nicesquirL is just really nice
Отправить сообщение для squirL с помощью ICQ Отправить сообщение для squirL с помощью Skype™
По умолчанию

Цитата:
Сообщение от ruFog Посмотреть сообщение
Здравствуйте!
Но есть и обратная сторона медали - такие запросы с одновременной сортировкой и фильтрацией по нескольким критериям достаточно "тяжелы" для MySQL (я на данный момент не использую кеширование).
индексы вы, надеюсь, используете?
Цитата:
Сообщение от ruFog Посмотреть сообщение
Возможно лучше будет сделать для каждого города отдельную базу данных + иметь некое отдельное хранилище пользователей (один раз зарегистрировавшись пользователь может размещать объявления о товарах в разных городах, т.е. в разных базах данных).
а смысл в отдельной базе? для пользователей - нужна просто отдельная таблица и все.

Цитата:
Сообщение от ruFog Посмотреть сообщение
PS: вот штатный запрос в mysql для:
Код:
SELECT * FROM `ndvbase` WHERE ndvbase.CITY=:p1 AND ndvbase.TYPE=:p2 AND ndvbase.ONLYFORUSERS=:p3 AND ndvbase.POSITION_DISTRICT IN (:p4) AND ndvbase.NUM_OF_ROOM IN (:p5) AND ndvbase.STATE IN (:p6,:p7) AND ndvbase.PRICE>=:p8 ORDER BY ndvbase.CREATED_AT DESC,ndvbase.RANK DESC LIMIT 840, 20
MYSQL5.1
explain для этого запроса штатного покажите.
__________________
use brain;
use hand;
мой адрес: RusNet #codenet IRC channel ;)
squirL вне форума   Ответить с цитированием
Старый 19.07.2009, 16:27   #3
ruFog
Начинающий
 
Регистрация: 18.12.2006
Сообщений: 6
Вес репутации: 0
ruFog is an unknown quantity at this point
По умолчанию

Вот Explain:

id = 1
select_type = SIMPLE
table = ndvbase
type = index_merge
possible_keys = ndvbase_I_1,ndvbase_I_3,ndvbase_I_5,ndvbase_I_13,n dvbase_I_15,ndvbase_FI_2
key = ndvbase_I_5,ndvbase_I_1,ndvbase_FI_2,ndvbase_I_3
key_len = 2,4,4,5
ref = NULL
rows = 1548
Extra = Using intersect(ndvbase_I_5,ndvbase_I_1,ndvbase_FI_2,ndv base_I_3); Using where; Using filesort

Предлагаете все оставить в одной базе данных? А как расширяться в случае высокой нагрузки на БД? Master-slave?
ruFog вне форума   Ответить с цитированием
Старый 19.07.2009, 16:43   #4
squirL
Пенсионер форума
 
Аватар для squirL
 
Регистрация: 13.08.2003
Адрес: Одесса/Киев
Сообщений: 4,740
Вес репутации: 66
squirL is just really nicesquirL is just really nicesquirL is just really nicesquirL is just really nicesquirL is just really nice
Отправить сообщение для squirL с помощью ICQ Отправить сообщение для squirL с помощью Skype™
По умолчанию

вопрос в том, какова задача. если для разных городов таблицы никак не связаны - да, можно делать отдельную базу. если связи существуют - надо удумать другое решение.
__________________
use brain;
use hand;
мой адрес: RusNet #codenet IRC channel ;)
squirL вне форума   Ответить с цитированием
Старый 19.07.2009, 16:49   #5
ruFog
Начинающий
 
Регистрация: 18.12.2006
Сообщений: 6
Вес репутации: 0
ruFog is an unknown quantity at this point
По умолчанию

Для большого набора городов таблицы идентичны. Можно оставить все в одной БД, но как mysql будет справляться с запросами (наподобии вышеприведенного), если в базе будет порядка полумиллиона записей? Мне к сожелению не доводилось сталкиваться с архитектурами "крутых" проектов. Может быть они тоже все в одной базе держат и просто докупают слейв-серверов для распределения нагрузки..

PS: где бы вобще почитать про это все дело.. в рунете скудно как-то.
ruFog вне форума   Ответить с цитированием
Старый 19.07.2009, 22:40   #6
kot_
Пенсионер форума
 
Аватар для kot_
 
Регистрация: 20.01.2000
Адрес: Днепропетровск
Сообщений: 4,522
Вес репутации: 76
kot_ is a splendid one to beholdkot_ is a splendid one to beholdkot_ is a splendid one to beholdkot_ is a splendid one to beholdkot_ is a splendid one to beholdkot_ is a splendid one to beholdkot_ is a splendid one to beholdkot_ is a splendid one to behold
Отправить сообщение для kot_ с помощью ICQ
По умолчанию

Цитата:
Сообщение от ruFog Посмотреть сообщение
Для большого набора городов таблицы идентичны. Можно оставить все в одной БД, но как mysql будет справляться с запросами (наподобии вышеприведенного), если в базе будет порядка полумиллиона записей? Мне к сожелению не доводилось сталкиваться с архитектурами "крутых" проектов. Может быть они тоже все в одной базе держат и просто докупают слейв-серверов для распределения нагрузки..

PS: где бы вобще почитать про это все дело.. в рунете скудно как-то.
Вроде бы у Велингтона данным вопросам уделялось некоторое внимание. Но вообще то база на полмиллиона записей - само по себе это не слишком много на сегодняшний момент. Я кстати недавно описывал решение в которой используется одна база для нескольких сайтов (с несколькими общими таблицами) - в принципе тот же подход можно использовать и для обратной ситуации - один сайт на несколько баз - разницы нет никакой.
__________________
Вы получите ответ, если заслужите его, задавая существенный, интересный и наводящий на размышления вопрос — вопрос, неявно дающий сообществу новый опыт, а не просто пассивно требующий от других поделиться знаниями.(с)We
Компьютерные услуги в Днепропетровске
Спецодежда в Днепропетровске. Опт и розница.
kot_ вне форума   Ответить с цитированием
Ответ

Опции темы
Опции просмотра

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Mdi архитектура Proger77 Microsoft Visual C++ 1 17.02.2009 00:58
Архитектура x86-64 Евгений Кривенко Низкоуровневое программирование 2 31.07.2008 19:33
архитектура приложения с поддержкой plug-in vAC Общие вопросы программирования 1 09.03.2008 11:38
ADO.NET: Архитектура клиентского приложения БД rSolanov Microsoft .NET Framework 10 05.02.2008 14:54
Архитектура ЭВМ homa_brut Низкоуровневое программирование 5 14.05.2003 20:04


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


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd. Перевод: zCarot
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог