Мне нужно хранить десятки или даже сотни миллионов данных на диске. Каждая часть данных содержит информацию, как:Как перенести данные на диск и как произвольно обновлять его, так и эффективно передавать его обратно в ОЗУ?
id=23425
browser=firefox
ip-address=10.1.1.1
outcome=1.0
Новые элементы данных могут быть добавлены в размере до 1-к за миллисекунды.
Таким образом, это относительно простой набор пар ключ-значение, где значения могут быть строками, целыми числами или поплавками. Иногда мне может потребоваться обновить кусок данных с определенным идентификатором, изменив поле флага от 0 до 1. Другими словами, мне нужно иметь возможность выполнять поиск случайных ключей по id и изменять данные (на самом деле только плавающие точечный «результат» - так что мне никогда не понадобится изменять размер значения).
Другим требованием является то, что я должен иметь возможность передавать эти данные с диска (порядок не особенно важен) эффективно. Это означает, что голова жесткого диска не должна перемещаться по диску для чтения данных, а должна читаться в последовательных блоках диска.
Я пишу это на Java.
Я думал об использовании встроенной базы данных, но DB4O не является вариантом, так как это GPL, а остальная часть моего кода - нет. Я также беспокоюсь об эффективности использования встроенной базы данных SQL, учитывая накладные расходы на перевод в SQL-запросы и из них.
У кого-нибудь есть идеи? Могу ли я создать собственное решение для этого (где я имею дело непосредственно с ByteBuffers и обрабатываю идентификатор)?
«DB4O не является вариантом, так как это GPL, а остальная часть моего кода не является» - это имеет значение только в том случае, если вы планируете распространять свой код. –
Я планирую распространять свой код – sanity