Высокопроизводительный механизм хранения баз данных - PullRequest
0 голосов
/ 28 января 2009

Мне нужны идеи для реализации (действительно) высокопроизводительного механизма баз данных / хранения в оперативной памяти. В диапазоне хранения более 20000 объектов, каждый объект обновляется каждые 5 или около того секунд. Я хотел бы получить решение FOSS .

Какой мой лучший вариант? Каковы ваши переживания?

Я работаю в основном на Java, но мне нужно, чтобы хранилище данных имело хорошую производительность, поэтому решение для хранилища данных не обязательно должно быть ориентировано на Java.

Мне также нужно иметь возможность запрашивать эти объекты, и мне нужно иметь возможность восстанавливать все объекты при запуске программы.

Ответы [ 9 ]

3 голосов
/ 28 января 2009

SQLite - это автономная база данных с открытым исходным кодом, которая поддерживает базы данных в памяти (просто подключитесь к :memory:). Он имеет привязки для многих популярных языков программирования. Это традиционная реляционная база данных на основе SQL, но вы не запускаете отдельный сервер - просто используйте ее как библиотеку в своей программе. Это довольно быстро. Достаточно ли быстро, я не знаю, но это может стоить эксперимента.

Драйвер Java .

1 голос
/ 28 января 2009

Посмотрите на некоторые продукты, перечисленные здесь: http://en.wikipedia.org/wiki/In-memory_database

1 голос
/ 28 января 2009

Память в памяти?

1) простой массив C 'malloc', в который будут проиндексированы все ваши структуры.

2) berkeleyDB: http://www.oracle.com/technology/products/berkeley-db/index.html. Это быстро, потому что вы строите свои собственные индексы (вторичная база данных), и нет выражения SQL для оценки.

1 голос
/ 28 января 2009

Зависит от того, как именно вам нужно сделать запрос, но вы изучили memcached?

http://www.danga.com/memcached/

Другие опции могут включать MySQL MEMORY Tables , APC Cache , если вы используете PHP.

Было бы полезно получить более подробную информацию о проекте / требованиях.

1 голос
/ 28 января 2009

Проверить HSQLDB и Prevayler . Prevayler - это смена парадигмы от традиционной СУБД, которую я использовал (парадигму, то есть не специально Prevayler) в ряде проектов, и нашел, что она имеет реальные преимущества.

1 голос
/ 28 января 2009

вы обновляете 20К объектов каждые 5 секунд или обновляете один из 20К каждые 5 секунд?

Что за объекты? Почему традиционной РСУБД недостаточно?

0 голосов
/ 08 июля 2016

Хроническая карта - это чистая Java хранилище значений ключей

  • имеет действительно высокую производительность, поддерживая 1 миллион операций записи в секунду из одного потока . Это миф, что быстрая база данных не может быть написана на Java.
  • Легко хранит и загружает любые сериализуемые объекты Java, предоставляет простой Map интерфейс
  • LGPLv3

Поскольку у вас не так много «таблиц», полноценная база данных SQL может оказаться излишним решением, индексы и запросы могут быть реализованы с помощью нескольких различных хранилищ значений ключей, которые обновляются вручную с помощью простого Java-кода. Хроническая карта предоставляет механизмы для одновременной изоляции таких обновлений друг от друга, если вам это нужно.

0 голосов
/ 28 января 2009
0 голосов
/ 28 января 2009

Какой уровень прочности вам нужен? 20 000 обновлений каждые 5 секунд, вероятно, будут сложными для большинства устройств ввода-вывода с точки зрения количества транзакций, если вы записываете данные обратно на диск для каждой.

Если вы можете позволить себе потерять некоторые обновления, вы можете записывать их на диск каждые 100 мс без проблем с довольно дешевым оборудованием, если ваша база данных и ОС поддерживают это.

Если это действительно база данных в памяти, которую вы не хотите часто записывать на диск, это звучит довольно банально. Я слышал, что H2 довольно хорош, но SQLite тоже может работать. Правильно настроенный экземпляр MySQL также может это сделать (но может быть более запутанным)

...