clopomor
Март 2, 2009 21:30:15
clopomor
Март 2, 2009 21:33:21
clopomor
Март 2, 2009 21:36:11
Lexander
Март 3, 2009 00:19:07
ZZZ
Ну он вообще-то для этого и создан. Не знаю, как оно работает в SQLite, но вот в моём любимом PostgreSQL оно работает замечательно. Проверено.
Я не про хранение в BLOB, а про получение файла, если в поле он Гб размера, то ты и полчишь все поле целиком - т.е. именно то, чего ты опасаешься.
ZZZ
Март 3, 2009 02:19:05
Нет, Lexander, совсем нет. Я не полезу сейчас в доку, то в двух словах я описал выше. Select'ом ты получаешь id объекта в DB, который открываешь (что-то типа blob_open(id, “rw”)). Потом ты спокойно пишешь туда и оно сразу пишется в базу (про систему кешей забудем). И также читается.
Фактически работает с файлом в DB.
По крайней мере это верно для Постгри. И судя по всему для SQLite из Си.
ZZZ
Март 3, 2009 04:19:04
clopomor… Это интересно. Спасибо.
Начал с itools…
andreytata
Март 3, 2009 12:18:58
Это однозначно “bsddb”. Родной питоновский сишный модуль. Изначально создавался для разработки файловых систем. Могуч и оч-быстр. исходник примерно 80 файлов на плайн С. Нормальный питоновский интерфейс предоставляется модулем “shelve”. Примерно в 800 раз быстрее чем хранить в файловой системе. Но есть ограничения - мультизадачное использование несколько затруднено - нужно быть экспертом. Резервное копирование - не лишняя предосторожность. На поразительное быстродействие этого решения мы обратили внимание почти случайно - нужно было поднимать множество маленьких файликов с участками 3D ландшафта для рендерения в реальном времени для MMO игрушки и хранить на стороне клиента уже посещенные участки на пару десятков километров в каждую сторону от его активных камер. Ну и стирать давно не посещаемые участки на клиенте.
ЗЫ: Но все равно посоветовал бы хранить только индексы, и мелкие файлы, а большие файлы разместить на другом (FTP) серваке, и хранить в базе только инфу о них. Так весь сервис скорость явить сможет не детскую. :)
ZAN
Март 3, 2009 14:08:17
ZZZ
Я только за! :-)
Но как?
http://wiki.osdev.org/Loopback_Device#Formatting_the_partitionХотя, как я понимаю, вариант с монтированием петлевого устройство не подойдет.
ZZZ
Март 4, 2009 01:14:22
andreytata
Но все равно посоветовал бы хранить только индексы, и мелкие файлы, а большие файлы разместить на другом (FTP) серваке, и хранить в базе только инфу о них.
Эта замечательная идея совершенно не влазиет в концепцию.
Юзеры должны мочь создавать эти пакеты и перекидываться ими без участия сервера.
При попадании пакета на сервер, надо получить его метаинфу и (!) он может быть подписан… Тар всё-таки тормоз…
Покапал я всё это и понял. Нужно писать самому. В общем там ничего сложного. Если кому-то это интересно – пишите, выложу.
andreytata
Март 4, 2009 05:42:25
1. Это естественно не сложно совсем. Только вынужден предупредить, что ЭТО уже очень многораз написано - и Вы начинаете заново писать файловую систему. Во времена моей юности каждый писал собственный файловый система - но в современных условиях это уже перебор. Ещё один мега-NTFS конечно не повредит, но “bsddb” содержит быструю и качественную основу “fs”. Сперва Реализуйте функциональность Вашего сервиса, используя “bsddb” через “shelve” потом в процессе эксплуатации сервиса сформулируйте десять отличий “ТОГО ЧТО ВАМ НАДА” от “bsddb” и напрягите ГУГЛ - сабж 100% имеется в наличии, как одина из монтируемых файловых систем в многочисленных UNIX-ах. Тогда останется только АДАПТИРОВАТЬ найденый “fs” к интерфейсу “shelve” т.е. “anydbm” по имеющимся в поставке Питона образцам, в коде сервиса после этого менять ничего не прийдется. Если всё работает и так, то у Вас останется время на дополнительный перфекционизм уже после начала эксплуатации ВАШЕГО продукта.
2. Обдумайте вопрос гранулярности сервиса. Когда 10000 клиентов обслуживаентся одновременно через сокеты, а один из них зажал весь сервис ибо вливает немерянного размера файл ( в реале он ВСЁЕДИНО вливает немерянное количество маленьких буфферков, и закончит слив всего сабжа за пол-часа - или за 10 лет - зависит только от того, насколько древняя модема на его на чукотская телефонная линия.). Может тогда и самодельный FS станет не нужен.
:)