Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

про архитектуру бд   Найти похожие ветки 

 
antonn ©   (2012-03-08 15:12) [0]

Задачку такую предстоит решить, может кто чего умного подскажет :)
Есть несколько бд-серверов (mssql, ну порядка 10, скажем так, с возможностью увеличения в 2-3 раза) с относительно слабыми каналами связи (1-10мбит), в них в базе хранится табличка содержащая в себе записи о товарах, записей порядка 40к-50к. У каждого товара есть идентификатор, общий для всех баз, но цены могут различаться. Мне нужно сформировать на своем сервере (вот тут будет либо оракл, либо mysql, скорее всего последнее) список товаров, цена которых была бы максимальная среди цен всех баз на удаленных серверах.

Мне пока видится два решения:
1. создать одну таблицу для серверов (id, server_name), и одну таблицу под товары повторяющую структурой таблицу на удаленном сервере + поле id_сервера, куда слить все товары со всех баз, а потом диким запросом выдернуть из нее список товаров с максимальными ценами.
2. создать под каждую удаленную базу свою таблицу, все они будут с префиксом, потом, не менее диким, запросом найти максимальную цену на товар по всем таблицам с префиксом.

дело осложняется тем, что скорее всего базой будет mysql, а средой выполнения php.
Кто какой вариант бы выбрал? В принципе, полмиллиона записей не такая уж большая цифра, но вот как быстро мускл с группировкой ее обработает...


 
Jeer ©   (2012-03-08 15:29) [1]

Ну и кто мешает выдернуть со всех серверов подтаблицы с макс. ценами для каждого сервера во временную таблицу на основном сервере и затем сделать довыбор по макс.ценам ?


 
Андреевич   (2012-03-08 15:58) [2]

да, я тоже склоняюсь больше к первому варианту


 
asail ©   (2012-03-08 20:01) [3]

Второй вариант, имхо, и не вариант вообще, бо жесть полная...
Первый вариант, самое то. Только не понял про

> а потом диким запросом выдернуть

В чем "дикость"-то? Вроде, самым банальным запросом сие совершить можно...


 
Андреевич   (2012-03-08 20:08) [4]

да так прикинул, что если каждая удаленная табличка разрастется до 100-150 к записей, и их 20, и не ко всем будет коннект (а значит после удачного коннекта нужно очистить во временной/ых таблицах данные по этой базе (старые данные должны остаться, если коннекта нет)), не сильно ли напряжно будет для таблицы удаление такого кол-ва записей если их в ней около 2кк будет суммарно? (это я на будущее просто смотрю)

хотя мож ищу проблему там где ее нет...


 
asail ©   (2012-03-08 20:22) [5]

Вообще, наверное лучше тянуть только изменения на центральную базу. Т.е., раз сгрузив со всех серверов все данные, дальше только обновлять центральную базу... Ессно, таблица не временная, а самая что не на есть постоянная. Короче, репликация... Это если я правильно понял задачу, конечно...


 
Андреевич   (2012-03-08 20:57) [6]

У меня вебсервис (php+mysql), в нем таблица никак не причастная к удаленным базам окромя того, что в нее сливаются данные с них. Сама операция слива будет производиться руками оператором, т.е. она довольно редко выполняется (ну максимум 10 раз в день, наверное).
"временная" - это я неверно выразился, в ней/них будут храниться временные данные, сама таблица будет существовать все время (просто потому что удаленный сервер может быть недоступен, тогда будут использоваться данные полученые с него ранее).
Дома попробую сделать таблицу на мильон записей и прогнать запрос, может действительно зря паникую.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.067 c
15-1340372291
БарЛог
2012-06-22 17:38
2013.03.22
Почему вода из шланга течет


2-1330521256
Мальчик
2012-02-29 17:14
2013.03.22
Delphi - ADO - DBF (Ошибка синтаксиса)


2-1340276861
Xmen
2012-06-21 15:07
2013.03.22
Чтение из секции только значение.


2-1339691646
vasa777
2012-06-14 20:34
2013.03.22
заставка xe2 с текстом


15-1328797365
Empleado
2012-02-09 18:22
2013.03.22
Billiards masters





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский