Безбаховое решение для базы данных для работы только на одной машине? - PullRequest
1 голос
/ 08 апреля 2011

Я ищу базу данных без схемы для хранения примерно 10 [ТБ] данных на диске, в идеале, с использованием клиента Python. Предлагаемое решение должно быть бесплатным для коммерческого использования и иметь хорошую производительность для чтения и записи.

Основной целью здесь является хранение данных временных рядов, включая более миллиарда записей, к которым обращается time stamp.

Данные будут храниться в следующей схеме:

KEY -> "FIELD_NAME.YYYYMMDD.HHMMSS"

ЗНАЧЕНИЕ -> [v1, v2, v3, v4, v5, v6] (v1..v6 просто floats)

Например, предположим, что:

FIELD_NAME = "TOMATO"

TIME_STAMP = "20060316.184356"

ЗНАЧЕНИЯ = [72,34, -22,83, -0,938, 0,265, -2047,23]

Мне нужно иметь возможность получить VALUE (весь массив), учитывая комбинацию FIELD_NAME & TIME_STAMP.

Запрос VALUES [" TOMATO.20060316.184356 "] вернет вектор [72.34, -22.83, -0.938, 0.265, -2047.23]. Чтение массивов должно быть максимально быстрым.

Но мне также нужен способ хранения (на месте) скалярного значения в массиве. Предположим, что я хочу присвоить 1-му элементу TOMATO на отметке времени 2006/03/16.18:43:56 значение 500.867. В таком случае мне нужен быстрый механизм для этого - что-то вроде:

ЗНАЧЕНИЯ [" TOMATO.20060316.184356 "] [0] = 500,867 (это приведет к обновлению на диске)

Может ли что-то вроде MangoDB работать? Я буду использовать только одну машину (не нужно для репликации и т. Д.), Под управлением Linux.

УТОЧНЕНИЕ: только одна машина будет использоваться для хранения базы данных. Тем не менее, мне нужно решение, которое позволит нескольким машинам подключаться к той же базе данных и обновлять / вставлять / читать / записывать данные в / из нее.

Ответы [ 4 ]

4 голосов
/ 08 апреля 2011

MongoDB, вероятно, является хорошим выбором, связанным с производительностью, гибкостью и удобством использования (легко доступно).Однако большие базы данных требуют тщательного планирования, особенно когда речь идет об аспектах резервного копирования и высокой доступности.Без дальнейшего понимания требований проекта мало что можно сказать, достаточно ли одной машины (посмотрите наборы реплик и шардинг, если вам нужна шкала опций).

Обновление: на основе вашей новой информации - должно быть выполнимо сMongoDB (протестируйте и оцените).Легко говорить: MongoDB может быть «MySQL» в базах данных NoSQL .... если вы знаете о базах данных SQL, вы сможете легко работать с MongoDB, поскольку он заимствует много идей и концепций из мира SQL.Глядя на вашу модель данных ... это тривиально, и данные могут быть легко извлечены и сохранены (не вдаваясь в подробности) .. Я предлагаю скачать MongoDB и пройтись по учебнику.

3 голосов
/ 08 апреля 2011

Экземпляр MongoDB может позволить нескольким машинам получить к нему доступ. Вам, однако, придется предоставить серверу специальные аргументы командной строки, чтобы он мог это сделать. Вам следует поискать документацию MongoDB, она довольно полная. Документация для модели аутентификации mongodb здесь . Он описывает, как запустить Mongo в безопасном режиме и как ограничить диапазоны ip, которые могут с ним связываться.

2 голосов
/ 08 апреля 2011

MongoDB будет работать. Однако, учитывая ваши требования, я настоятельно рекомендую Redis.

Redis - это хранилище структуры данных. Где вы можете хранить свои массивы как значения и получать к ним доступ с помощью ключей. Это легко установить / использовать и смехотворно быстро. Он хорошо работает как на одном машинном сервере, так и на другом.

Для Redis доступны отличные клиенты Python, такие как Redisco , redis-natives-py и redis-wrap или простейший redis-py.

1 голос
/ 08 апреля 2011

Другой вариант, который следует рассмотреть: Berkeley DB или Berkeley DB Java Edition . BDB - это библиотека C, где в качестве BDB JE - это библиотека Java. Оба предоставляют несколько API-интерфейсов для хранения данных, включая API пары ключ-значение (NoSQL), API коллекций Java и API-интерфейс уровня Java Direct Persistence Layer (POJO-like).

Любая библиотека может управлять хранилищем объемом 10 ТБ в одной системе. Оба предоставляют возможности HA, которые позволяют вам реплицировать базу данных (и любые изменения) на несколько систем. Чтения могут быть отправлены на мастер или любую из реплик (обеспечивая балансировку нагрузки). Обновления должны быть отправлены мастеру. У нас есть клиенты, которые сегодня используют Berkeley DB для такого рода установки. Berkeley DB существует уже много лет, и это именно то приложение, которое у нас хорошо получается.

Отказ от ответственности: я менеджер по продукту в Berkeley DB, поэтому я немного предвзят. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...