Что такое более быстрые, плоские файлы или база данных MySQL RAM?

Короткий ответ - то, что можно использовать экстерна C, чтобы сказать компилятору не использовать искажение имени. Это означает, что можно соединить биты C и кода C++ в том же проекте.

6
задан OMG Ponies 17 September 2009 в 18:35
поделиться

8 ответов

Плоские файлы? Неееет ...

Используйте хороший движок БД (MySQL, SQLite и т. Д.). Затем, для максимальной производительности, используйте memcached для кеширования содержимого.


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

Имейте в виду пару вещей:

  1. MySQL имеет кеш запросов. Если вы повторно отправляете одни и те же запросы, вы можете получить большую производительность без добавления уровня кэширования.
  2. MySQL в любом случае работает очень быстро. Вы провели нагрузочное тестирование, чтобы продемонстрировать, что это недостаточно быстро?
13
ответ дан 8 December 2019 в 04:53
поделиться

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

Если вы просто ищете для максимально быстрого обмена данными и сохранения их в ОЗУ, тогда memcached - идеальное решение.

Если вы хотите сохранить данные, используйте СУБД, например MySQL.

6
ответ дан 8 December 2019 в 04:53
поделиться

Как правило, лучше использовать БД, однако, если вы разделяете небольшой, в основном статический объем данных, это может дать повышение производительности (и простоту) работы с плоскими файлами.

Что-нибудь кроме тривиального обмена данными, но я бы выбрал БД.

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

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

Поэтому вам в любом случае понадобится серверная база данных, чтобы обеспечить совместное использование данных между веб-серверами. Если ты'

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

Я бы сказал, что MySql DB будет лучшим выбором, если у вас нет какого-либо механизма для работы с блокировками плоских файлов (и некоторого способа управления доступом). В этом случае уровень БД (независимо от конкретной СУБД) действует как косвенный уровень, позволяя вам не беспокоиться об этом.

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

0
ответ дан 8 December 2019 в 04:53
поделиться

Если в вашей системе есть кэш PHP (который кэширует скомпилированный код PHP в памяти, например APC), попробуйте поместить ваши данные в файл PHP в виде кода PHP. Если вам нужно записать данные, есть некоторые проблемы с безопасностью.

0
ответ дан 8 December 2019 в 04:53
поделиться

Мне нужен простой способ для нескольких запуск сценариев PHP для обмена данными.

APC и memcached - хорошие варианты в зависимости от контекста. совместно используемая память также может быть вариантом.

Следует ли мне создавать базу данных MySQL с ОЗУ механизм хранения и обмен данными через что (может несколько скриптов подключаться к одна и та же БД одновременно?)

Это тоже неплохой вариант, но, вероятно, он не будет таким быстрым, как APC или memcached.

Или плоские файлы с одним фрагментом данные на строку лучше?

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

Если это хранилище данных, к которому могут обращаться одновременно несколько авторов, ни в коем случае НЕ используйте плоский файл! Запись в плоский файл из нескольких процессов может привести к повреждению файла. Вы можете заблокировать файл, но вы рискуете вызвать конфликты блокировок и длительное время ожидания блокировки.

Обработка одновременных операций записи является причиной существования таких приложений, как mysql и memcached.

0
ответ дан 8 December 2019 в 04:53
поделиться

Вы используете схему под названием полиморфные ассоциации , и это часто делается неправильно. Чтобы заставить его работать, нужно создать другую таблицу, скажем, members: abstract :

CREATE TABLE IF NOT EXISTS `members:abstract` (
 `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
 `type` enum('class','elected','appointed','status') NOT NULL,
  UNIQUE KEY (`id`, `type`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

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

CREATE TABLE IF NOT EXISTS `members:appointed` (
 `id` INT UNSIGNED NOT NULL PRIMARY KEY, -- not auto_increment
 `name_prefix` varchar(8) collate utf8_bin NOT NULL COMMENT 'Prefix Added to Members Name',
 `hours_extra` decimal(4,2) NOT NULL COMMENT 'Hours Given as Bonus for Holding this Position.',
 `position` varchar(40) collate utf8_bin NOT NULL COMMENT 'Name of the Posisiton',
 FOREIGN KEY (`id`) REFERENCES `members:abstract` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Undefined within the SOP or By-Laws.';

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

DELIMITER //
DROP TRIGGER IF EXISTS ins_appointed//
CREATE TRIGGER ins_appointed BEFORE INSERT ON `members:appointed`
FOR EACH ROW BEGIN
  INSERT INTO `members:abstract` (`type`) VALUES ('appointed');
  SET NEW.id = LAST_INSERT_ID();
END; //
DELIMITER ;

Сделайте то же самое для каждого из остальных таблицы атрибутов.

Обратите внимание, что значения id теперь уникальны для всех ваших таблиц атрибутов.

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

Версия TD / LR: Используйте плоские файлы для системы на основе заданий (также известной как простой анализ журналов), а не для запросов веб-поиска.

2- Плоские файлы падают: Если вы собираетесь использовать плоский файл, вам нужно будет синхронизировать ваши скрипты при изменении файла с помощью специального механизма блокировки. Что может привести к замедлению работы, повреждению вплоть до мертвой блокировки, если у вас есть ошибка.

3 - База данных на основе RAM? Большинство баз данных имеют в памяти кеш для результатов запросов и поисковых индексов, поэтому их очень сложно превзойти с помощью плоского файла. Поскольку они кэшируют в памяти, запускать их полностью из памяти в большинстве случаев неэффективно и опасно. Лучше правильно настроить конфигурацию базы данных.

Если вы хотите оптимизировать производительность с помощью оперативной памяти, я бы сначала посмотрел на запуск ваших скриптов php, html-страниц и небольших изображений с RAM-диска. Где механизм кеширования, скорее всего, будет грубым и систематически попадет на жесткий диск для неизменяющихся статических данных.

Лучшего результата можно достичь с помощью балансировщика нагрузки, кластеризации с подключениями объединительной панели до массива SAN на основе оперативной памяти. Но это совершенно другая тема.

5- могут ли несколько скриптов подключаться к одной и той же БД одновременно?

Да, это называется пулом соединений. Думаю, вы можете настроить максимальное открытое соединение в php.ini. Аналогичная настройка на стороне сервера mysql определяет максимальное количество одновременных клиентских подключений в /etc/mysql/my.cnf.

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

В конфигурации Apache также есть один пул соединений / пул потоков для обычных веб-клиентов. См. Httpd.conf.

Простите за стену текста, было скучно. Луи.

2
ответ дан 8 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

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