Здравствуйте, Cyberax, Вы писали:
C>Файловая система тесно интегрирована с ядерным менеджером кэша и системой виртуальной памяти. Т.е. фичи типа sendfile могут работать очень быстро.
1)Что мешает тоже самое сделать с SQL сервером?
2)В правильных ОС фичи типа sendfile не нужны ибо они будут получатся автоматически.
C>И сделать такое обобщённо может и не получится — абстракции текут (к примеру, требуется особое выравнивание для того, чтобы работало DMA и т.п.).
Никуда оно не течет.
ОСь аля сингулярити. Следи за руками:
1)Приложение SQL среверу: Дай мне вон тот блоб на пару гигов.
2)SQL сревер файловой системе: Заверни кусок того файла от сих до сих в поток.
3)Файловая система драйверу винта: Вот тебе поток сложи в него такие то блоки.
4)Файловая система SQL среверу: держи поток.
5)SQL сревер приложению: держи поток.
6)Приложение сетевому соединению: Отправь поток.
Все! Вот тебе sendfile. И без единой протечки.
Драйвер винта будет запихивать в поток страницы, а драйвер сетевухи будет доставать из потока массивы которые выровнены драйвером винта.
Накладные расходы только на обслуживание потока. И проверку того что очередной кусок действительно выровнен. Иначе через DMA отправляем подмассив который выровнен, а начало и/или конец как придется. От современных ОС отличий никаких.
Приложение, SQL сревер и файловая система в передаче данных не участвуют.
Причем все полностью safe.
А если не полениться и прикрутить зависимые типы то ВМ на этапе компиляции проверит что все состояния протоколов обработаны. А если еще немного подумать то проверит что все обработано правильно.
Причем все будет работать с минимумом проверок ибо нафига если почти все доказано?
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн