Вопрос архитекторам
Добавлено: 03 окт 2003, 11:25
Привет!
Нашёл я новую работу, а с ней и проблемы, с которыми раньше дела не имел. Подскажите, кто сталкивался, плз.
Система получает данные через сокет и задача её - эти данные неким образом сохранить. Сейчас всё хранится в отдельных файлах, на каждую "единицу клиента" - отдельный файл. Размеры файлов - ширина записи и их количество - примерно одинаковы, точнее, записи бывают всего 3 типов, соответственно есть 4 "типоразмера" файлов.
Данные приходят "пакетами", размер пакетов можно регулировать, но за 3 минуты должно пройти до 200к пакетов по 30 байт примерно. Для сети такой объем прокачать не проблема. В итоге за 3 минуты в каждый клиентский файл придёт один пакет (так сейчас).
Возник
о scalability. Начали тестировать и выяснили, что на Win2000 Prof со SCSI диском больше, чем 500 файлов записать не получается. Точнее, когда файлов ВСЕГО 1000 - без проблем, но если число файлов растёт (и их хэндлы или ещё что-то, тут я не в курсе, не помещаются в кэш) - всё, кранты, на выборке из 10к файлов на запись в 500 из них уходит 5-7 секунд. А надо - в перспективе до 1млн файлов держать.
Итого: похоже, что отдельными файлами тут не обойтись. Первая идея - объединить нек. количество файлов в один. В принципе, работает, понятно, что создав достаточно большие файлы, на 1000 "клиентов" каждый, можно сделать их, файлов, количество управляемым. Первые тесты показали, что схема вроде как работоспособна. Но: хотелось бы знать о подводных камнях. Может ли вин2003 сервер многократно увеличить производительность такой схемы? Никогда не работал с Линукс, может быть, там всё быстрее? Есть ли там такой "фокус", как открытие одного файла на запись многократно разными потоками с возможностью блокировки отдельного участка непосредственно для обновления? (почти уверен, что есть, но всё же)
Кроме того, я, собственно, много работал с БД, с МС СКЛ в основном, но никогда с такими большими: размер базы "для начала" > 200ГБ, кол-во записей в таблице - около 8 млрд для начала. Соответственно, не представляю себе, какой сервер может потянуть такие размеры и апдейт 1000 записей в секунду (+ выборки), а пока уверенности нет, перетаскивать всё в базу нельзя.
All comments are highly appreciated.
Иосиф
Нашёл я новую работу, а с ней и проблемы, с которыми раньше дела не имел. Подскажите, кто сталкивался, плз.
Система получает данные через сокет и задача её - эти данные неким образом сохранить. Сейчас всё хранится в отдельных файлах, на каждую "единицу клиента" - отдельный файл. Размеры файлов - ширина записи и их количество - примерно одинаковы, точнее, записи бывают всего 3 типов, соответственно есть 4 "типоразмера" файлов.
Данные приходят "пакетами", размер пакетов можно регулировать, но за 3 минуты должно пройти до 200к пакетов по 30 байт примерно. Для сети такой объем прокачать не проблема. В итоге за 3 минуты в каждый клиентский файл придёт один пакет (так сейчас).
Возник

Итого: похоже, что отдельными файлами тут не обойтись. Первая идея - объединить нек. количество файлов в один. В принципе, работает, понятно, что создав достаточно большие файлы, на 1000 "клиентов" каждый, можно сделать их, файлов, количество управляемым. Первые тесты показали, что схема вроде как работоспособна. Но: хотелось бы знать о подводных камнях. Может ли вин2003 сервер многократно увеличить производительность такой схемы? Никогда не работал с Линукс, может быть, там всё быстрее? Есть ли там такой "фокус", как открытие одного файла на запись многократно разными потоками с возможностью блокировки отдельного участка непосредственно для обновления? (почти уверен, что есть, но всё же)
Кроме того, я, собственно, много работал с БД, с МС СКЛ в основном, но никогда с такими большими: размер базы "для начала" > 200ГБ, кол-во записей в таблице - около 8 млрд для начала. Соответственно, не представляю себе, какой сервер может потянуть такие размеры и апдейт 1000 записей в секунду (+ выборки), а пока уверенности нет, перетаскивать всё в базу нельзя.
All comments are highly appreciated.
Иосиф