Наверняка многие об этом задумывались, возможно у кого то эта идея лежит в TODO. У меня она пролежала примерно год, но таки удалось ее реализовать в виде работающего прототипа.
TgCloud:
- Виртуальная файловая система с открытым исходным г****кодом.
- На локальном диске — только метаданные: имена, размер, структура папок и т.д.
- Данные хранятся в Telegram и загружаются только при работе с файлом
- Размер и тип файлов не ограничен, можно использовать с любой ОС
Идея
Идея создать VFS на базе Telegram появилась во время работы над AudioTubeBot и VideoTubeBot — после того как был найден способ обойти ограничение в 50мб на загрузку файлов для ботов — я изучил исходники Telegram — открыл много интересного. Например скорость загрузки ограничивается большей частью на самом клиенте, а не сервером.
В результате — увеличил скорость загрузки в облако Telegram до ~240мбит/с на сессию (стабильно работает больше года), что в 15 раз превышает скорость официального клиента.
Логичным шагом было использовать неограниченное файловое хранилище с высокой скоростью загрузки в качестве сетевого диска — наверняка многие так и делают, но проблема в том, что клиентами telegram достаточно неудобно пользоваться для поиска и систематизации файлов. Кроме того — существует лимит в 1.5ГБ на размер одного файла.
FUSE
Для решения этих проблем я сперва решил сделать патч ядра Linux и сделать свою виртуальную файловую систему, которая позволяла бы удобным образом группировать файлы загруженные в Telegram, при этом используя только метаданные.
В процессе изучения вопроса выяснилось что патчить ядро совсем не обязательно т.к. в Linux существует специальный модуль ядра FUSE, который позволяет разработчикам создавать новые типы файловых систем, доступные для монтирования пользователями без привилегий. Для модуля есть обертки почти под все популярные языки.
Telethon
Для доступа к Telegram я использую библиотеку Telethon версии 0.19.1 с модифицированной мной многопоточной загрузкой файлов(TelegramClientX).
VFS
Чтобы не писать с нуля файловую систему — за основу взята dedupfs на python, использующая fuse и sqlite для хранения метаданных, которая разбивает файлы на блоки, считает sha1 хэш и переиспользует одинаковые блоки — нужно всего лишь заменить методы загрузки данных в хранилище на свои.
TgCloud
Объединив это все — получился рабочий прототип tgcloud, пока что без космических скоростей, но все же рабочий, надеюсь привлечь сообщество к разработке. Загружаемые файлы разбиваются на блоки по 10МБ, рассчитывается sha1 и загружаются в SavedMessages, хеш сохраняется в локальной базе данных и при чтении блока по нему находится файл. Блоки склеиваются в нужном порядке и выдается поток байт — будто вы читаете их с диска.
Для запуска кода
- Необходимо получить api_hash и api_id на my.telegram.org и вставить эти данные вместе с номером телефона вашего аккаунта в tg_access.py
- Создать сессию запустив из папки с проектом
python3.6 download_service.py
sudo yum install python-fuse
mkdir storage
python dedupfs/dedupfs.py -df —block-size 10240000 storage/
python dedupfs/dedupfs.py —block-size 10240000 storage/
P.S. Про этическую сторону (из комментариев)
как вариант — резать скорость на серверной стороне, ограничивать количество потоков загрузки и т.д. — способов ограничить расход диска достаточно и без «прикрытия лавочки», но даже с порезанной скоростью — наличие дополнительного уровня абстракции над загруженными данными — это тупо удобно, когда можно систематизировать файлы не только в рамках чатов и каналов, а так как удобно пользователю — при этом наоборот — данных загружаться будет меньше за счет переиспользования блоков. Если в текущей системе мне нужно отредактировать текстовый документ загруженный — я его скачиваю, редактирую и загружаю заново, при этом 90% данных дублируют уже загруженные, при использовании же VFS — загружены заново будут только изменившиеся блоки.
То есть для обычных пользователей это в целом — благо, если этим кто то решит воспользоваться чтобы хостить порно — ну с ними как то пусть борются, это ведь философия Telegram — что «даже если этим будут пользоваться небольшое количество людей для плохих дел — это не значит что нужно это все запретить и т.д. и т.п.»
- 2x Xeon Silver 4214 — суммарно 24 ядра
- 2x Xeon Gold 5218 — суммарно 32 ядра
- 2x Xeon Gold 6240 — конфигурация с 36 ядрами.
Если большие мощности выделенного сервера не требуются — VDS от 150 руб/мес — то, что вам нужно!
- Блог компании VDS.SH / DEDIC.SH
- Python
- Хранение данных
- Облачные сервисы
- Лайфхаки для гиков
Источник: habr.com
Как не засорять память телефона файлами из Telegram
На вашем телефоне недостаточно памяти? Наверняка, вы уже удалили многие приложения и регулярно чистите кэш, но и этого недостаточно? Если вы активный юзер мессенджеров, тогда стоит обратить внимание на медиафайлы, которые вы получаете и отправляете в мессенджере. Наверняка их у вас достаточно накопилось. Все медиафайлы, скачиваемые вами, автоматически появляются в кэше приложения. Отлично, если место на вашем гаджете позволяет хранить большие объемы файлов и информации, но что если у вас всего 16 гигабайт? Тогда следует задуматься об очистке памяти телефона от медиафайлов мессенджера Telegram, которые вам точно не понадобятся.
Для того, чтобы освободить память телефона от кэша, следуйте приведенным пунктам:
- Откройте мессенджер Telegram.
- Перейдите в «Настройки» и кликните «Данные и память».
- Выберите «Использование памяти», а затем «Срок хранения медиа».
- Выберите очистку через 3 дня/1 неделю/1 месяц.
- Теперь ваше приложение не будет занимать более 5 гигабайт памяти телефона.
Если же вы вспомнили, что удалили нужный файл из кэша, не переживайте его можно восстановить. Вам просто нужно перейти и скачать необходимое с серверов Telegram.
Общайтесь в удовольствие!
Telegram как хранилище файлов
Технологией облачного хранилища данных вряд ли удивишь современного человека. Сходу можно перечислить внушительное количество примеров сервисов, основное или косвенное предназначение которых — хранение данных.
И хотя революционного в этой возможности нет, ее наличие в Telegram — еще один важный фактор, повышающий удобство использования мессенджера, и делающий его универсальным приложением, способным заменить десятки других.
Техническая реализация облака Telegram
Облако — это, безусловно, упрощенное и обобщенное объяснение технологии cloud storage. Однако с точки зрения визуализации для конечного пользователя именно так и выглядит это хранилище: множество личных файлов будто на одном большом сервере, облаке.
В Telegram этим визуально видимым облаком прежде всего является чат с самим собой, ставший после апгрейда разделом «Избранное» («Saved messages»). И обладает это хранилище тремя ключевыми свойствами:
- Бесплатность;
- Неограниченный объем;
- Кроссплатформенность.
Ограничение наложено только одно: вес отправляемого в облако файла не должен превышать 1500 Мб. Трудностью это является только в случае отправки «цельного файла» — фильма, например. А вот какие-то дробные массивы данных достаточно разделить на несколько архивов и залить в свое Telegram-хранилище. То же самое справедливо для отдельных и групповых чатов.
Как найти и использовать Telegram-хранилище
Способы применения ограничены лишь Вашей фантазией. Используйте облако для хранения личных данных, обмена смешными картинками с друзьями или устройте корпоративный чат, убивающий сразу двух зайцев:
- заменяющий одним готовым приложением сервисы а-ля DropBox и Google Drive, а также другие мессенджеры.
- Все отправленные файлы доступны как с мобильной, так и с десктоп версии Telegram.
Вход в Ваше персональное хранилище осуществляется через иконку возле никнейма в настольной версии приложения. В мобильной версии нужно также перейти в основное меню, единственное отличие — кликнуть нужно на текстовом пункте «Избранное».
Рекомендуем сразу закрепить чат, чтобы иметь к своему облаку максимально быстрый доступ. Кстати, закрепить в топе можно только 5 каналов или чатов.
Отправляйте сюда все, что пожелаете, прикрепляя файлы через скрепку или просто перетягивая их в диалоговое окно. Как мы отметили выше, удобно пользоваться не только личным облаком, но и общим хранилищем с другими людьми.
Как добраться до совместной мультимедийной базы данных с мобильной версии:
- Нажимаем на аватарку человека/группы, чтобы открыть меню;
- Переходим в раздел «Общие медиа»;
- Если необходимо перейти в раздел по типу файлов, то нажимаем на название раздела «Общие медиа» и выбираем соответствующий пункт.
В настольной версии шаги следующие:
- Для отдельного чата: нажимаем на аватарку собеседника и выбираем тип данных.
- Для группового чата:
Первый способ — кликаем на три точки справа сверху диалогового окна, чтобы открыть меню. Нажимаем на «Информация о группе» и выбираем тип данных.
Второй способ — следует нажать на имя группового чата слева сверху диалогового окна.
Управление сохраненными данными
Всеми отправленными файлами можно в дальнейшем управлять вне зависимости от их расположения — в личном ли они хранилище или общем.
Вы можете:
— Перейти к конкретному сообщению, в котором был отправлен файл;
— Переслать это сообщение в любой доступный чат;
— Удалить сообщение;
— Выделить сообщение, после чего можно будет выбрать несколько других файлов и совершить любую из трех названных выше операций.
Кстати, возможно вас заинтересуют следующие статьи:
Источник: comptrick.ru