Эффективное персистентное устройство хранения данных для простого идентификатора к таблице значений отображается для Java

Индексная функция, вероятно, могла бы быть устранена кем-то, кто лучше знает XPath, но тем не менее приведенное ниже, похоже, работает надежно. Следующее будет вставлено в B2 вашего образца:

=index(IMPORTXML("http://www.google.com/search?&q="&"Address+of+"&A2&"+in+british+columbia"&"&oq="&"Address+of+"&A2&"+in+british+columbia","//span"), 15, 1)

Это основано на предположении, что все объекты расположены в Британской Колумбии. Вы можете параметризовать раздел поиска Google, чтобы добавить более широкий спектр возможных мест поиска.

5
задан Quinn Taylor 15 June 2009 в 20:01
поделиться

7 ответов

Это походит на задание для.... new ObjectOutputStream(new FileOutputStream(STORAGE_DIR + "/" + key + ".dat"); !!

Серьезно - самый простой метод должен просто создать файл для каждой таблицы данных, что Вы хотите сохранить, сериализировать данные в и взгляд это использование ключа как имя файла, когда Вы хотите читать.

В достойной файловой системе записи могут быть сделаны атомарными (путем записи во временный файл и затем переименования файла); скорость чтения-записи измеряется в 10-х Мбит/секунда; посмотрите взлеты могут быть сделаны очень эффективными путем создания простого дерева каталогов как STORAGE_DIR + "/" + key.substring(0,2) + "/" + key.substring(0,4) + "/" + key который должен быть все еще эффективным с миллионами записей и еще более эффективным, если Ваша файловая система использует индексируемые каталоги; наконец его тривиальное для реализации поддержанного памятью кэша LRU сверху этого для еще более быстрых извлечений.

Относительно сжатия - можно использовать сжатие свободного городского населения Джакарты для влияния на gzip или даже bzip2 сжатие к данным перед хранением его. Но это - проблема оптимизации и в зависимости от Вашего приложения и доступного дискового пространства, можно быть более обеспеченным инвестированием циклов ЦП в другом месте.

Вот демонстрационная реализация, которую я сделал: http://geek.co.il/articles/geek-storage.zip. Это использует простой интерфейс (который далек от того, чтобы быть чистым - его просто демонстрация понятия), который предлагает методы для того, чтобы сохранить и получить объекты от кэша с размером максимума набора. Неудачное обращение в кэш передано пользовательской реализации для обработки, и кэш будет периодически проверять, что это не превышает требования устройства хранения данных и удалит старые данные.

Я также включал поддержанную реализацию MySQL для завершения и сравнительного теста для сравнения находящихся на диске и основанных на MySQL реализаций. На моей домашней машине (старый Athlon 64) дисковые очки сравнительного теста лучше затем дважды с такой скоростью, как реализация MySQL во вложенном сравнительном тесте (9,01 секунд по сравнению с 18,17 секундами). Даже при том, что реализация DB может, вероятно, настроил для немного лучшей производительности, я полагаю, что она демонстрирует проблему достаточно хорошо.

Не стесняйтесь использовать это, как Вы считаете целесообразным.

3
ответ дан 14 December 2019 в 09:01
поделиться

Я использовал бы EHCache, он используется, в спящем режиме и другие библиотеки Java EE, и действительно просто и эффективен:

Добавить таблицу:

List<List<Integer>> myTable = new(...)
cache.put(new Element("myId", myTable));

Читать:

List<List<Integer>> myTable = (List<List<Integer>>) cache.get("myId").getObjectValue();
2
ответ дан 14 December 2019 в 09:01
поделиться

Кажется, что Ключ => Базы данных Значения являются вещью, которую Вы ищете.

Возможно, SuperCSV является лучшей платформой для Вас!

Если Вы не хотите использовать реляционную базу данных, можно использовать JAXB, чтобы хранить Объекты как XML-файлы!

Существует также путь с другими библиотеками как XStream

Если Вы предпочитаете XML, то используйте JAXB или XStream. Иначе необходимо взглянуть на библиотеки CSV, такие как SuperCSV. Люди, которые могут жизнь с сериализированными файлами Java, могут использовать механизм постоянства по умолчанию как сказанный Guss. Прямое постоянство Java может быть самым быстрым путем.

0
ответ дан 14 December 2019 в 09:01
поделиться

Можно использовать http://joafip.sourceforge.net/ JOAFIP, Это делает Вас способными поместить всю Вашу модель данных в файл, и можно получить доступ к нему, обновить его, не перезагружая все в памяти.

0
ответ дан 14 December 2019 в 09:01
поделиться

Вы посмотрели на Беркли DB? Это кажется, что может отвечать всем требованиям.


Править:

Я забыл добавлять, что Вы можете gzip сами значения перед хранением их. Затем просто разархивируйте их при получении их.

1
ответ дан 14 December 2019 в 09:01
поделиться

Если у Вас есть несколько КБ, я не понимаю, почему необходимо "сжать размер этой структуры на диске как можно больше", Учитывая, что 181 МБ дискового пространства стоит 1 цент, я предположил бы, что что-то меньшее чем это не стоит проводить слишком много времени, вызывая беспокойство о.

Однако для ответа на вопрос можно сжать файл, поскольку Вы пишете это. А также ObjectOutputStream, можно использовать XMLExcoder для сериализации карты. Это будет более компактно, чем просто использование ObjectOutputStream и если Вы распакуете файл, то Вы сможете считать или отредактировать данные.

XMLEncoder xe = new XMLEncoder(
    new GZIPOutputStream(
        new FileOutputStream(filename+".xml.gz")));
xe.writeObject(map);
xe.close();
0
ответ дан 14 December 2019 в 09:01
поделиться

Derby Apache мог бы быть подходящим вариантом, если Вы хотите что-то встроенное (не отдельный сервер).

Существует список других опций в Легких Базах данных в Java

1
ответ дан 14 December 2019 в 09:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: