Я работаю над приложением, в котором нужно хранить метаданные, связанные с музыкальными файлами (исполнитель, название, счетчик воспроизведения и т. Д.), А также наборы целых чисел (в частности, хэши SHA-1).
Решение, которое я выбираю, должно:
fork
другой процесс, или, по крайней мере, обеспечить легкий интерфейс для этого (например, libmysqld).Решения, которые я рассмотрел, включают:
Гипотетическим решением, которое я считаю идеальным, было бы что-то вроде Redis, но которое сохраняет данные на диск и сохраняет только некоторую часть данных в памяти для быстрого поиска. Redis сам по себе не может быть хорошим вариантом, потому что 1) мне нужно fork
это вручную, 2) его порт Windows кажется менее надежным, и 3) хранение все моих данных в оперативной памяти было бы не идеально.
Есть ли какие-либо другие решения для этого типа проблемы, или одно из решений, которые я уже перечислил, намного лучше, чем другие?
В конце концов, я решил использовать SQlite для метаданных. Кажется, это так же быстро, если не быстрее, чем, например, libmysqld, и он имеет действительно простой чистый C-интерфейс. Согласно тестам, это должно быть более чем достаточно быстро, чтобы удовлетворить мои потребности.
Для более крупных структур данных я планирую просто хранить их в отдельных двоичных файлах (на веб-сайте SQlite говорится, что он может хранить двоичные данные, но если размер данных превышает определенный объем, то вместо этого быстрее хранить их в плоских файлах — см. эта страница).
Не храните двоичные файлы BLOBS внутри SQLite, если только вам не нужна база данных размером со слона. Просто сохраните строку с именем файла пути в файловой системе. Единственным недостатком SQLite является то, что он не разрешает удаленный (веб) доступ, но вы можете встроить его в небольшой сервер TCP / HTTP.