РЕДАКТИРОВАТЬ: обратите внимание, что из-за того, как жесткие диски фактически записывают данные, ни одна из схем в этом списке не работает надежно.Не используйте их.Просто используйте базу данных.SQLite - хороший простой.
Какой самый технологичный, но надежный способ хранения кортежей строк UTF-8 на диске?Для надежности хранилище должно быть только для добавления.
Как часть системы хранения документов, с которой я экспериментирую, мне нужно хранить данные кортежа UTF-8 на диске.Очевидно, что для полноценной реализации я хочу использовать что-то вроде Amazon S3, Project Voldemort или CouchDB.
Однако на данный момент я экспериментирую и даже не до конца остановился на программировании.языка пока нет.Я использую CSV, но CSV, как правило, становятся хрупкими, когда вы пытаетесь сохранить странный юникод и неожиданные пробелы (например, вертикальные табуляции).
Я мог бы использовать XML или JSON для хранения, но они не играют хорошос файлами только для добавления.Мое лучшее предположение до сих пор - довольно специфический формат, где каждой строке предшествует 4-байтовое целое число со знаком, указывающее количество байтов, которые он содержит, а целочисленное значение -1 указывает, что этот кортеж завершен - эквивалент новой строки CSV,Основным источником головной боли является необходимость выбора порядкового номера целого на диске.
Редактировать: на самом деле это не сработает.Если программа завершается во время записи строки, данные становятся безвозвратно смещенными.Какой-то внеполосный сигнал необходим для обеспечения восстановления выравнивания после прерванного кортежа.
Редактировать 2: оказывается, что гарантируется атомарность при добавлении в текстовые файлы,но парсер совсем нетривиален.Написание указанного синтаксического анализатора сейчас.
Редактировать 3: Конечный результат можно посмотреть на http://github.com/MetalBeetle/Fruitbat/tree/master/src/com/metalbeetle/fruitbat/atrio/.