Что является более дорогостоящим на каждом просмотре страницы - Записи Базы данных или Записи Файла?

Существует более элегантный способ.

Swift 3:

let str = "Hello"
let buf = [UInt8](str.utf8)

Swift 4: (благодаря @PJ_Finnegan)

let str = "Hello"
let buf: [UInt8] = Array(str.utf8)
6
задан tshepang 15 May 2014 в 21:38
поделиться

6 ответов

Если это просто запись небольшого количества данных без последующего поиска, прямой файловый ввод-вывод почти гарантированно будет более эффективным. Однако вы теряете все преимущества СУБД - индексацию, целостность транзакций (на самом деле, ACID в целом), одновременный доступ и т. Д.

Похоже, вы говорите о том, что составляет простое ведение журнала. Если это так, и вам не нужно часто выполнять сложные запросы к полученным данным, вам, вероятно, будет лучше использовать прямой ввод-вывод файлов, если производительность является серьезной проблемой. Однако будьте осторожны с проблемами одновременной записи.

Если свойства РСУБД желательны, вы можете подумать об использовании SQLite, который для упрощенной загрузки даст вам лучшую производительность, чем большинство РСУБД с меньшими накладными расходами, за счет некоторых преимуществ (одновременный доступ и доступность по сети для других машин - это лишь пара «больших проблем»). Однако в общем случае это все равно будет не так быстро, как простой файловый ввод-вывод.

Ваше последующее упоминание об этом для отслеживания просмотров страниц заставляет меня спросить: вы увеличиваете счетчик, а не регистрируете данные о просмотр страницы? Если это так, я настоятельно рекомендую использовать что-то вроде SQLite (сделать что-то вроде UPDATE tbl SET counter = counter + 1). Вы действительно не хотите вдаваться в вопросы времени, связанные с выполнением этого вручную - если вы не сделаете это правильно, вы начнете терять счет при одновременном доступе (A читает "100", B читает "100" , A пишет «101», B пишет «101»; B должен был написать 102, но не может этого знать).

9
ответ дан 8 December 2019 в 12:22
поделиться

Попадание в базу данных, скорее всего, будет дороже, чем запись в файл.

Если ваши просмотры страниц в секунду высоки, и если данные не должны быть доступны в базе данных сразу, тогда запись в файл и периодическая загрузка данных в БД будет более оптимальным решением.

Однако все это зависит от характера данных, которые вы

3
ответ дан 8 December 2019 в 12:22
поделиться

По сути, запись в базу данных всегда медленнее, чем запись в файл. База данных также должна записывать в файл с дополнительными накладными расходами на передачу данных в базу данных, чтобы она могла записать их в файл. Следовательно, он должен быть медленнее.

Тем не менее, базы данных очень хорошо выполняют дисковый ввод-вывод, возможно, лучше, чем вы. Не удивляйтесь, если вы обнаружите, что простой файловый регистратор работает медленнее, чем запись его в базу данных. База данных имеет множество оптимизаций ввода-вывода и содержит некоторые приемы, которые вы можете не использовать (в зависимости от вашего веб-языка и среды).

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

4
ответ дан 8 December 2019 в 12:22
поделиться

Это зависит.

И это действительно так: это зависит от СУБД и / или файловой системы OS +, которую вы используете. Другими словами: ваш опыт варьируется.

Если вы просто добавляете данные куда-нибудь, современные СУБД / ОС + файловые системы должны справиться с этим одинаково хорошо и быстро. Проблемы возникают, когда вы хотите изменить данные.

Кэширование - также зависит от того, какую степень детализации кеширования вы можете себе позволить (необходимо, чтобы каждое пошаговое протоколирование защищено от сбоев по сравнению с потенциальной экономией).

1
ответ дан 8 December 2019 в 12:22
поделиться

That highly depends on your needs for data safety. If you can afford to lose some data in case of a crash then keeping the data in memory and writing it periodically to a persistent store is certainly the most efficient way to go.

Edit: You mentioned pageviews. In that case I would keep the counters in memory and periodically update a database table (like every minute or so).

2
ответ дан 8 December 2019 в 12:22
поделиться

Использовать гибридное решение типа redis, предназначенное для такого рода вещей

.
0
ответ дан 8 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: