Мысли о файловых дубляжах "ВКонтакте"

Если кому интересно почитать про то, как устроена самая большая социальная сеть в России и СНГ (речь, конечно же, о сайте "ВКонтакте"), то вот ссылка на неплохую статью, в которой описывается техническая сторона устройства "Вконтакте".

Дуров и Ко говорят, что фотографии с серверов не удаляются, чтобы избежать излишней фрагментации на жестких дисках, где они хранятся. То, что они не удаляются, печально для пользователей, т.к. они-то думают, что удалили, к примеру, свою фотографию, которую не хотят больше "засвечивать", а на деле оказывается, что она продолжает храниться на серверах. А если возбуждено какое-нибудь судебное разбирательства против пользователя, и фотографии, которые якобы удалены, являются вещественным доказательством в этом деле? Скорее всего, технически проблем не составит поднять эти фото с хардов. Тогда судебное дело, явно, пойдет быстрее. Хотя, возможно, это лишь мои параноидальные мысли и такого никогда не будет. Но извините, зачем тогда вводить человека в заблуждение, писав надпись "фотография удалена"? Я считаю, что данные, публикуемые человеком о себе, при желании от них избавится, должны быть немедленно удалены, а не хранится на задворках жестких дисков. Однако, даже аккаунты "ВКонтакте" не удаляются при запросах в тех.поддержку, куда там про какие-то фотографии.

Далее хочется поговорить об избыточности информации. "ВКонтакте" - это огромнейшее хранилище музыки и видео. Когда я ищу какую-нибудь песню, чтобы ее послушать, мне выдается много одинаковых треков, которые размещены разными пользователями соц.сети. Вот интересно, как устроено хранение таких одинаковых данных? Сразу же приходят две мысли: у них тупое хранение - это когда на серверах хранятся десятки тысяч одинаковых музыки и видео, или же у них умное хранение, которое позволяет избегать такого колоссального дубляжа информации. Неплохим решением я вижу создавать хеш загружаемого файла. Потом, когда человек загружает какой-нибудь файл, система будет проверять, а если ли такой файл у нас на сервере или нет? Проверка осуществляется по хешу загруженного на сервер файла. Если хеш дублируется - то удаляем только что загруженный файл и на его место вставляем ссылку на файл-оригинал.

Видео/музыку "ВКонтакте" можно клонировать, нажав кнопку "Добавить это видео/музыку". Опять же, а как происходит это клонирование? Тупо копируются файлы или создается псевдокопия? Скорее всего последний вариант, потому что тогда я не представляю, сколько надо иметь хардов для хранения всей этой информации! Продолжу начатую мысль. Когда мы удаляем видео/музыку, она на самом деле не удаляется. Удаляетя лишь ее псевдокопия, т.е. в БД просто удаляется информация о том, что у аккаунта номер такой-то размещено видео/музыка такое-то. Да, это очень хороший и разумный способ избегать дубляжа медиафайлов.

Однако, все эти подходы рушатся, когда люди загружают музыку/видео, которые по содержанию одинаковы, но отличаются всего лишь на несколько секунд по длине (как вы поняли, под длиной я подразумеваю длительность воспроизведения). Не думаю, что тут можно как-то избавиться от проблемы, ведь она не на столько серьезна, как та, которая описана выше. Все таки таких медиафайлов, одинаковых по содержанию, но разных по длине, гораздо меньше, чем возможных дубляжей на серверах. К примеру, мы имеем при поиске композиции Modern Talking - "You're my heart, you're my sou", 2 тыс. треков. Из них 300 треков отличаются длиной (разные миксы, аранжировки и т.п.), остальные же по длине одинаковы. Значит, нам надо хранить на сервере всего 301 файл, 1699 файл - это дубляжи, имеющие всего один оригинал. Конечно, может быть и так, что длина одинакова, но файл по содержанию разный (к примеру, разные аранжировки при одной длине). Но и в этом нет ничего страшного, ведь, как я уже писал, мы проверяем файлы, которые загружаются на сервер, по хешу, а он для разных по содержанию файлов свой уникальный (пока что отбросим в сторону проблему коллизии хешей).

Многие одинаковые медиафайлы "ВКонтакте" имеют разные названия. Т.е. один и тот же файл может быть назван на сайте пользователем по-разному. Опять же, это не значит, что раз названия разные, то на сервере должны держаться копии одного и того же. Скорее всего, "ВКонтакте" сделано что-то вроде такого (если нет, то я бы так сделал):

БД -> аккаунт пользователя -> таблица размещенных медиафайлов -> ссылка на оригинальный медиафайл; название файла, введенное пользователем.

Хотя, если вот поизучать ссылки на медиафайлы "ВКонтакте", не трудно увидеть, что для одинаковых и полностью идентичных файлов ссылки-то разные:

http://cs5022.vkontakte.ru/u79238645/audio/eecf467a2aa0.mp3
http://cs4719.vkontakte.ru/u3304845/audio/3f4af3db6dea.mp3

Т.е. получается, что "Вконтакте" все-таки использует дубляжи?

  • Действительно, очень странно что контакт хранит так много дубликатов. Я тоже давно задумывался, почему они не проверяют добавляемую сущность на дубликаты. Осмелюсь предположить, что это происходит из-за того, что "Вконтакту" не вариант проверять все хэши на совпадения..допустим в базе у них есть 10000 уникальных записей..тогда при каждом добавлении им нужно будет сравнить новый хэш с уже существующими 10000 других хэшей..а это время..хотя с учетом того, что песня аплоадится и так довольно долго, это звучит мягко говоря странно..видимо все таки им просто лень заморачиваться с этим и они аплоадят все что попадается...