Шардирование файла.
Пакет предоставляет функционал по шардированию файла и абстрагирует его, до уровня стандартного интерфейса GoLang io.ReadWriteCloser
.
Пакет разбивается на несколько отдельных интерфейсов, которые можно использовать не зависимо друг от друга:
- Collection - предоставляет коллекцию шардов файлов, доступные готовые реализации находятся в пакете collection;
- Namer - предоставляет имя для нового шарда файла, доступные готовые реализации находятся в пакете namer;
- Rotator - Условия для ротации шардов файла, доступные готовые реализации находятся в пакете rotator;
- Writer - расширяет стандартный интерфейс GoLang
io.WriteCloser
под нужды пакета, реализации должны абстрагировать запись в шарды файла,
имитируя запись в один файл, доступные готовые реализации находятся в пакете writer;
- Reader - расширяет стандартный интерфейс GoLang
io.ReadCloser
под нужды пакета, реализации должны абстрагировать чтение из шардов файла,
имитируя чтение из одного файла, доступные готовые реализации находятся в пакете reader.
type CollectionOption func(collection Collection) (Collection, error)
type Collection interface {
Next() (*os.File, error)
Count() int
Namer() Namer
}
type Namer interface {
Name() string
SearchRegexp() *regexp.Regexp
AddExtension(extension string)
}
type Rotator interface {
Rotate(fileInfo os.FileInfo) bool
}
type WriterOption func(writer Writer) (Writer, error)
type Writer interface {
io.WriteCloser
File() (*os.File, error)
OpenNewFile() error
Namer() Namer
}
type ReaderOption func(reader Reader) (Reader, error)
type Reader interface {
io.ReadCloser
File() (*os.File, error)
Collection() Collection
}
Пакет предоставляет объект File
, который реализует интерфейс io.ReadWriteCloser
и синхронизирует компоненты Writer и Reader,
во избежание чтения и записи в/из одного шарда файла. Для получения ссылки на новый объект File
следует использовать метод NewFile(writer Writer, reader Reader)
Важно. Объект File не является потокобезопасным, весь процесс записи должен проходить последовательно,
для избежании повреждения данных.