Когда использовать MySQL над «базой данных» файловой системы при проверке уникальных строк - PullRequest
0 голосов
/ 09 апреля 2020

Примечание: это только в случае проверки уникального EXACT MATCH строк менее 128 символов.

Очень распространенная операция во многих моих приложениях это просто проверка существования постоянной строки , которая представляет собой

  • уникальное имя пользователя,
  • уникальное имя файла / URL
  • (в общем) уникальную строку (UUID) например)

Раньше, не особо задумываясь об этом, я только что создал стандартную таблицу в MySQL для отслеживания этого.

Мне недавно сказали, что эту эквивалентную операцию простой проверки уникальной строки, вероятно, следует просто выполнить в файловой системе, отметив file_exist() в пути.

У меня вопрос, когда нужно использовать MySQL против просто (?) Файловой системы?


Наивно я понимаю, что MySQL предназначен для индексации лучше - но это только для более сложных операций?

У меня есть несколько проблем:

  1. Не ухудшается ли PHP file_exists(), когда в папке находится большое количество файлов? В какой момент вы должны «осколить» папку на сервере CentOS или Ubuntu Apache (на самом деле, я не уверен, насколько это зависит от версии PHP, ОС, версии веб-сервера)?
  2. Если нужно делать что-то вроде файлов списков, это также приводит к высокой производительности по сравнению с обычными MySQL SELECT Like '%bla%', например?

Лемма: должны ли обе системы создаваться параллельно? Используется ли файловая система для быстрых проверок и система MySQL для распечатки / поиска / других операций?

1 Ответ

0 голосов
/ 09 апреля 2020

Для всех этих вариантов использования вам просто нужна таблица, которая описывает каждый из них, а затем вы можете проверить уникальность этого. Ключ должен иметь индекс UNIQUE для каждого важного столбца, например:

CREATE TABLE users (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  UNIQUE KEY `index_users_name` (`name`)
);

Где теперь тривиально проверить:

SELECT COUNT(*) FROM users WHERE name=?

Если вы просто ищете точный Матчи. Вы также можете использовать WHERE IN (?,?, ...) для списка возможных совпадений.

Примечание. Файловую систему можно использовать только в том случае, если с этими идентификаторами связано большое количество двоичных данных. Столбцы BLOB MySQL требуют от сервера гораздо больше работы, чем файл на диске, а также могут усложнить вашу стратегию резервного копирования. Сбросить базу данных объемом 10 ГБ не сложно, но выгрузка базы данных объемом 2 ТБ требует значительных усилий, даже если изменился только один файл.

...