Я ищу базу данных без схемы, чтобы хранить примерно 10 [ТБ] данных на диске, в идеале, используя клиент python. Предлагаемое решение должно быть бесплатным для коммерческого использования и иметь хорошую производительность для чтения и записи.
Основная цель здесь - хранить данные временных рядов, включая более миллиарда записей, к которым обращается time stamp
.
Данные будут храниться в следующей схеме:
KEY → "FIELD_NAME.YYYYMMDD.HHMMSS"
VALUE → [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.
CLARIFICATION: для хранения базы данных будет использоваться только одна машина. Тем не менее, мне нужно решение, которое позволит нескольким машинам подключаться к той же базе данных и обновлять/вставлять/читать/записывать данные в/из него.
MongoDB, вероятно, хороший выбор, связанный с производительностью, гибкостью и удобством использования (легкодоступный). Однако большие базы данных требуют тщательного планирования, особенно когда речь идет о аспектах резервного копирования и высокой доступности. Без дальнейшего понимания требований к проекту мало что сказать о том, достаточно ли одного компьютера или нет (посмотрите на набор реплик и оштукатурите, если вам нужна шкала параметров).
Обновление: на основе вашей новой информации - должно выполняться с помощью MongoDB (протестируйте и оцените его). Easiliy said: MongoDB может быть "MySQL" из баз данных NoSQL... если вы знаете о SQL-базах данных, вы должны иметь возможность работать с MongoDB легко, так как он заимствует много идей и концепций из мира SQL. Глядя на вашу модель данных... это тривиально, и данные можно легко получить и сохранить (не вдаваясь в подробности). Я предлагаю загрузить MongoDB и пройтись по учебнику.
X
хранит базу данных, мне нужно, чтобы машины Y
, Z
имели доступ к этой базе данных, меняли значения в ней и т. Д .; MangoDB
поддерживает это?
Экземпляр MongoDB может позволить нескольким машинам получить к нему доступ. Тем не менее, вам нужно будет предоставить аргументы командной строки для сервера, чтобы это можно было сделать. Вы должны искать документацию MongoDB, это довольно полно. Документация для модели аутентификации mongodb здесь. В нем описано, как запустить Mongo в безопасном режиме и как ограничить диапазоны ip, которые могут привязываться к нему.
MongoDB будет работать. Однако, глядя на ваше требование, я настоятельно рекомендую Redis.
Redis - это хранилище данных. Где вы можете хранить свои массивы в качестве значений и обращаться к ним с помощью ключей. Его легко настроить и использовать, и это смехотворно быстро. Он хорошо работает как один сервер машины и так далее.
В Redis есть отличный клиент python, такой как Redisco, redis-natives-py и redis-wrap или простейший redis-py.
Redis
когда большая часть данных должна храниться / обновляться на диске (я читал, что это в основном для операций в памяти, хотя это могло измениться). (2) получу ли я снижение производительности, если мне нужно будет обновить элемент (по индексу) массива? скажем, мне нужно обновить элемент v3
в массиве (используя его индекс позиции). Это будет O (1)?
Еще один вариант для рассмотрения - 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, поэтому я немного предвзятый.: -)
Berkeley DB
бесплатно для коммерческого использования? (Я не говорю о внедрении его в пользовательское программное обеспечение - я говорю о нашей простой установке и использовании на серверах компании для хранения данных / исследовательских целей)