- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Заказчики подобных проектов зачастую не готовы и не умеют работать с БД, которые уже на старте проекта достигают размеров в районе 200-300 Гб. Не могут ни сделать бэкап ни развернуть его.
А заказчик и не должен уметь все это делать - это работа разработчика, настроить все так, чтобы клиент даже не думал, что там внутри. С таким подходом он не сможет и забэкапить файлы. О каких больших обьемах ты говоришь - я не понимаю. По факту ТС работает со списками ID. Работая с БД это несколько запросов, очень простых. Примитивные транзакции. С файлами нужно продумать хорошенько иерархию. Типа 100000.txt хранит айдишники до 100000, 200000.txt - до 200000 и тд. То есть я так понимаю, скрипт должен работать с произвольными именами, сначала определять в каком файле искать, открывать его, проверять на соответствие...
Насчет надежности такого метода у меня тоже есть сомнения. Если файл открыт для чтения, а в это время в него будет писаться новый айдишник, что произойдет? У меня нет опыта в таком, а в базе я знаю как это будет работать. Достаточно использовать ACID совместимые БД.
Искал бы построчным чтением с брейком в случае нахождения строки.
а что по скорости тут?
В моём тезисе про SQLite и альтернативы не было противопоставления. Придирка ни о чём.
Просто уточнил, нет придирок, может я не так прочитал)
Про подтверждение ответов.
Ну, в отличие от большинства местных графоманов, у тебя есть знания, вот мне и интересно стало уточнить. Все мы тут развлекаемся, но и учимся) По крайней мере некоторые.
Просто уточнил, нет придирок, может я не так прочитал)
Ну, в отличие от большинства местных графоманов, у тебя есть знания, вот мне и интересно стало уточнить. Все мы тут развлекаемся, но и учимся) По крайней мере некоторые.
Да, извини, если резковато пишу. Пятница, после НГ работать лень, сижу вот на форуме 😀
По формированию файлов-партиций. Пишем какую-нибудь функцию-метод, например такой псевдо-PHP, насколько я его помню.
Сюда пишем разные условия, пишем тест для этого кода и прогоняем его на большом объеме ID, проверить не выбрасывается ли Exception.
Главное, чтобы для каждого ID выдавались две буквы/цифры.
Этот метод вызываем и перед записью в нужный файл и при чтении из файла. Так мы узнаём куда писать и откуда читать.
Насчет надежности такого метода у меня тоже есть сомнения. Если файл открыт для чтения, а в это время в него будет писаться новый айдишник, что произойдет? У меня нет опыта в таком, а в базе я знаю как это будет работать. Достаточно использовать ACID совместимые БД.
а что по скорости тут?
Если с одной стороны файла его построчно читает интерпретатор, а с другой Unix-like OS пишет с помощью
то конфликтов возникнуть не должно. Я делаю подобные вещи довольно часто даже в ответственных задачах и ни разу не встречал ошибок совместного доступа к файлу. Хотя строго говоря, не читал академически выверенного подтверждения, что проблемы невозможны.
СУБД - хорошая штука. Они придуманы не зря. Только ну очень долго разворачиваются из бэкапа. И слишком сложны для заказчиков. Конечно, хорошо, когда у заказчика есть программисты, но часто даже у обеспеченных людей из сферы социальных медиа программистов нет и нужен софт с несколькими кнопками, починить который сможет произвольный фрилансер.
Так что просто пишем им скрипт для бэкапа, скрипт для развертывания и веб-интерфейс с двумя кнопками. Тут-то файловые хранилища и приходят нам на помощь.
Сюда пишем разные условия, пишем тест для этого кода и прогоняем его на большом объеме ID, проверить не выбрасывается ли Exception.
Ты, наверное первый, кто приводя пример кода сразу написал про тесты и про эксепшены! дважды респект)))
Да, я про такое и говорил, находим файл по маске, открываем, читаем/пишем, закрываем.
Вместо того чтобы в 2-х строчках открыть сессию с БД и сделать туда запрос)))
Для меня преимущества БД очевидны для эього кейса
И слишком сложны для заказчиков.
К счастью, у меня таких нет)))
Только ну очень долго разворачиваются из бэкапа
Хочешь сказать что копирование нескольких тысяч файлов будет быстрее?
Для меня преимущества БД очевидны для этого кейса
Конечно, каждый сделает так, как ему нравится.
Хороший специалист получит хороший результат почти любым способом.
СУБД тоже отлично подходят для большинства случаев.
Если файл открыт для чтения, а в это время в него будет писаться новый айдишник, что произойдет?
если залочить - то кто второй - тот подождёт. Да и в целом все БД построены на файлах, там нет никакой мистической другой технологии на принципиальном уровне. И если руками прописать механизм транзакций и обновление файлов с ключами и наиболее частыми сортировками, то получим примитивную систему БД. Но надёжную, быструю, понятную. Но такое на любителя, канеш. Но мне нравится иногда так делать, когда масштабирование точно не светит никогда.
Конечно, каждый сделает так, как ему нравится.
Честно - если я для похожего кейса предложу клиенту такое решение - меня наверное уволят одним днем... Обычно мы приходим к тем, у кого такие костыли и чиним) Например работал с медициноской компанией, которая у всех на слуху была в ковидные времена - помогали им обработать сотни миллионов записей с геномами человека в экселе. Сецчас врач загружает результаты анализа, система анализирует и на основе статистики предлагает лекарства и лечение.
если залочить - то кто второй - тот подождёт. Да и в целом все БД построены на файлах, там нет никакой мистической другой технологии на принципиальном уровне.
Естественно. Это не магия, просто готовая оболочка для работы. С кучей возможности. Можно конечно с файлами, но потом - хочу скорости - значит придумываем индексирование/хэшь, хочу параллельность - начинаем извращаться с одновременным доступом, хочу надежность - придумываем транзакции. По мне лучше потратить время продуктивнее. Я не могу годами писать мертворожденный фремфорк)))
а что по скорости тут?
классический unordered map
Скорость будет зависеть от глубины ведра (односвязного списка), которая зависит от качества hash-функции определяющей ведро.
В данном случае стоит идти дальше и строить дерево, добиваясь, чтобы в одном файле было не более 1-й строки. Условно брать md5 от имени файла, разбивать по 2 символа и каждый следующий уровень размещать в подкаталоге.
а-ля: MD5 (FileName) = 1e621df39e053ff6bc7db7bb1c616cc1
так мы исключаем возможность "разбухания" каталога на любом уровне ограничив его 256-ю файлами, а доступ к элементу будет осуществляться одним системным вызовом fopen, без всяких последующих хождений по файлам (связным спискам). По сути скорость (за вычетом хеш-функции) обращения сравняется со скоростью открытия сокета для доступа к БД и на порядок обгонит работу с ней.
function getPartitionCodeByYouTubeId($ytId){
$idFiltered = preg_replace('[^a-z\d]', '', strtolower($ytId));
if(strlen($idFiltered) >= 2){
return substr($idFiltered, 0, 2)
}
throw new IdErrorException(11111);
}
Применительно к данному коду (как пример неудачной хеш-функции), если большинство имён файлов будут начинаться с условного "aa" мы и получим проблему глубокого ведра.
классический unordered map
Скорость будет зависеть от глубины ведра (односвязного списка), которая зависит от качества hash-функции определяющей ведро.
В данном случае стоит идти дальше и строить дерево, добиваясь, чтобы в одном файле было не более 1-й строки. Условно брать md5 от имени файла, разбивать по 2 символа и каждый следующий уровень размещать в подкаталоге.
а-ля: MD5 (FileName) = 1e621df39e053ff6bc7db7bb1c616cc1
так мы исключаем возможность "разбухания" каталога на любом уровне ограничив его 256-ю файлами, а доступ к элементу будет осуществляться одним системным вызовом fopen, без всяких последующих хождений по файлам (связным спискам). По сути скорость (за вычетом хеш-функции) обращения сравняется со скоростью открытия сокета для доступа к БД и на порядок обгонит работу с ней.
Мне кажется, ты счас описал NoSQL))) Ну примерно. Но правильно я понял - хэши имен файлов нужно где-то хранить? И тогда постоянно заботиться о целостности?