Что выбрать для хранения всего одного целого числа? SQLite? или текстовый файл? - PullRequest
5 голосов
/ 25 января 2009

Я создал небольшой веб-сервис на PHP. Я хочу контролировать количество вызовов определенного метода API.

Сначала я подумал об использовании текстового файла, потому что это просто целое число. Но после тщательного изучения SQLite это показалось намного удобнее. Таким образом, код просто: получить «счетчик» из SQLite и увеличить его при вызове этого метода, а затем сохранить его на базе данных SQLite.

Это правильный способ сделать это? Будет ли проще и масштабируемее просто использовать файл или ... может быть что-то еще?

Заранее спасибо.

Ответы [ 6 ]

5 голосов
/ 25 января 2009

третья возможность: memcachedb . он совместим с memcached , но сохраняет хранилище ключей в файле BDB. он имеет не только команды чтения-записи, но также атомарный приращение / уменьшение числовых значений.

еще одна альтернатива - написать «встречный сервер». независимый процесс, который получает команды «чтения» и «приращения» через сокет. Преимущество состоит в том, что действительно легко делать «атомарные» приращения. он хранит свои счетчики в простом файле без проблем с параллелизмом, поскольку никогда не бывает более одного сервера.

должно быть легко написать менее чем сто строк C. Просто цикл, обрабатывающий одну команду за раз, сбрасывая на диск каждые несколько секунд Поскольку обработка настолько проста, задержка минимальна.

3 голосов
/ 25 января 2009

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

2 голосов
/ 25 января 2009

Конечно, используйте плоский файл.

  • Это будет правильно
  • Очень просто
  • Нет зависимости от сторонней библиотеки
  • Вы сможете просматривать или обновлять счетчик с помощью простого блокнота.
  • Быстрее, чем SQLite (без разбора SQL, без других накладных расходов)
  • и такой же масштабируемый, как SQLite (SQLite - это просто более сложные плоские файлы)

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

1 голос
/ 25 января 2009

Вы можете использовать разделяемую память для хранения счетчика и блокировку для обеспечения безопасного приращения.

1 голос
/ 25 января 2009

Поместите его в реальную базу данных, и текстовый файл, и БД SQLite будут иметь проблемы с блокировкой, когда, если файл (ы) открыт в данный момент и возникает новый запрос на открытие, второй запрос завершится ошибкой. Используйте реальную БД, такую ​​как MySQL, MSSQL или любую другую.

0 голосов
/ 27 января 2009

Согласно SQLite, он может обрабатывать сайты, которые достигают "100K [ sic ] хитов / день". Если вы собираетесь это сделать, вам может понадобиться изучить более надежную базу данных, например MySQL. Но если вы пишете 100 тысяч записей в базу данных каждый день для одного веб-сайта, я думаю, что-то не так с тем, что вы делаете, основываясь на вашем примере. Это действительно похоже на работу для кеширования. Что я ничего не знаю в PHP, извините.

Они говорят следующее о файлах и SQLite: «Многие программы используют fopen (), fread () и fwrite () для создания и управления файлами данных в домашних форматах. SQLite особенно хорошо работает в качестве замены для этих специальных файлов данных. " ( источник )

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