Какую базу данных следует выбрать для хранения событий окружающей среды, учитывая следующие критерии? - Необходим минимальный функционал и отсутствие избыточности (не рассматриваем PostgreSQL) - Идеально, чтобы записи нельзя было удалить, даже у пользователей с доступом к ним. Если событие произошло, оно должно оставаться в базе данных (возможно, невозможность удаления достигается другими способами, например, односвязным списком хешей, но такой механизм также может быть подвержен вмешательству. Существуют ли готовые механизмы для этого?) - Масштабируемость - Важна целостность данных - это основная цель разрабатываемой системы. Данные должны быть сразу записаны на диск без кеширования. Идеальный вариант - использовать файлы для хранения данных, но нужна масштабируемость, так как количество данных будет огромным.
Один из возможных вариантов базы данных, соответствующий указанным критериям - Apache Cassandra. Cassandra предоставляет масштабируемость и отказоустойчивость с использованием распределенной архитектуры. Она разработана для обработки огромных объемов данных и может быть горизонтально масштабируемой. Cassandra также обеспечивает высокую производительность записи на диск без кеширования данных. Однако, нужно учитывать, что Cassandra не имеет встроенной функциональности для предотвращения удаления данных. Механизмы сохранения интегритета данных, такие как хеширование и односвязные списки хешей, могут быть реализованы вне Cassandra, например, в приложении или на уровне стека программного обеспечения. Прежде чем принять окончательное решение, рекомендуется также оценить другие базы данных, такие как Apache HBase или Riak, которые также имеют масштабируемость и отказоустойчивость.
Подумайте о характере данных, которые вы будете хранить. Если это финансовые транзакции, то рассмотрите использование tigerbeetle - он предназначен специально для таких случаев. Он работает по принципу дополнительного записывания данных и оптимизирован для финансовых операций, с использованием концепции счетов. Он также обладает высокой пропускной способностью (до миллиона TPS).
Если нет проблем с использованием PostgreSQL, то он соответствует вашим требованиям и может быть простым в использовании.
Рассмотрите использование MongoDB для вашего случая. Она обеспечивает масштабируемость и целостность данных, а также контроль доступа на уровне документов. MongoDB также имеет встроенный механизм аудита для отслеживания изменений в данных. Однако, если вам нужна строгая ссылочная целостность и поддержка сложных запросов, то MySQL или PostgreSQL могут быть более подходящими вариантами.
Рассмотрите использование Cassandra.
- Избегайте удаления записей, даже у тех, кому доступ к ним есть. Невозможно удалить произошедшее событие. Возможно, другие механизмы обеспечивают такую гарантию, например, использование односвязного списка хешей, однако такие механизмы также могут быть подвержены изменениям злоумышленниками.
"Тот, кто имеет доступ", всегда может форматировать диски. Поэтому простое решение - не предоставлять доступ никому. Блокчейн дает подобную гарантию, но только в распределенной сети, включающей несколько организаций с разными интересами и миллионы пользователей.
Первый пункт можно исключить, учитывая наличие всех остальных - масштабируемость, контроль доступа и целостность уже являются значимыми факторами.