Я разрабатываю облачное программное обеспечение хранения поверх стека LAMP.
Файлы может иметь внутренний идентификатор, но будет иметь много преимуществ, если хранить их не с увеличивающимся идентификатором в качестве имени файла в файловых системах серверов, а с использованием хеша в качестве имени файла.
Кроме того, хэши в качестве идентификатора в базе данных будут иметь множество преимуществ, если текущая централизованная база данных должна быть сегментирована или децентрализована или должна быть настроена какая-то среда высокой доступности мастер-мастер. Но я еще не уверен насчет этого.
Клиенты могут хранить файлы под любой строкой (обычно это какой-то путь и имя файла).
Эта строка гарантированно уникальна, потому что на первом уровне это что-то вроде "buckets" «пользователи должны пройти регистрацию, как в хранилище Amazon S3 и Google.
Мой план состоит в том, чтобы хранить файлы в виде хэша пути, определенного на стороне клиента.
Таким образом, сервер хранения может напрямую обслуживать файл без необходимости в базе данных. спросите, какой это идентификатор, потому что он может вычислить хэш и, следовательно, имя файла на лету.
Но я боюсь коллизий. В настоящее время я подумываю об использовании хэшей SHA1.
Я слышал, что GIT использует хеши также и идентификаторы ревизий.
Я знаю, что вероятность коллизий действительно очень мала, но возможна.
Я просто не могу судить об этом. Вы бы использовали хэш для этой цели или нет?
Я мог бы также использовать некоторую нормализацию кодирования пути. Возможно, base64 в качестве имени файла, но я действительно не хочу этого, потому что это может стать беспорядочным, а пути могут стать слишком длинными и, возможно, другими осложнениями.