РЕДАКТИРОВАТЬ: Обратите внимание, что из-за того, как на самом деле жесткие диски записывают данные, ни одна из схем в этом списке не работает надежно. Не используйте их. Просто используйте базу данных. 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/ .