Безбаховое решение для базы данных для работы только на одной машине?

1

Я ищу базу данных без схемы, чтобы хранить примерно 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: для хранения базы данных будет использоваться только одна машина. Тем не менее, мне нужно решение, которое позволит нескольким машинам подключаться к той же базе данных и обновлять/вставлять/читать/записывать данные в/из него.

  • 0
    Извините, плохое описание вашей проблемы ... 10 ТБ данных означает что именно? Большие файлы? Много строк? Требования, связанные с долговечностью? ... Не торопитесь и предоставьте точные факты того, что вы действительно хотите.
  • 0
    @RestRisiko: я редактировал свой вопрос. Спасибо за помощь.
Теги:
database
nosql

4 ответа

4
Лучший ответ

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

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

  • 0
    Мне нужно уточнить, что только одна машина будет использоваться для хранения базы данных. Тем не менее, мне нужно решение, которое позволит нескольким компьютерам подключаться к одной базе данных и обновлять / вставлять / читать / записывать данные в нее / из нее. Поэтому, если машина X хранит базу данных, мне нужно, чтобы машины Y , Z имели доступ к этой базе данных, меняли значения в ней и т. Д .; MangoDB поддерживает это?
  • 0
    Почему это не должно быть возможно? MongoDB - это типичная клиент-серверная архитектура ...
Показать ещё 2 комментария
3

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

2

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

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

В Redis есть отличный клиент python, такой как Redisco, redis-natives-py и redis-wrap или простейший redis-py.

  • 0
    @ Шехар: спасибо. Пара вопросов: (1) как работает Redis когда большая часть данных должна храниться / обновляться на диске (я читал, что это в основном для операций в памяти, хотя это могло измениться). (2) получу ли я снижение производительности, если мне нужно будет обновить элемент (по индексу) массива? скажем, мне нужно обновить элемент v3 в массиве (используя его индекс позиции). Это будет O (1)?
  • 0
    1. Да, он сохраняет ваши данные. Чтобы быть правильным, он периодически записывает на диск (и этот интервал настраивается). 2. O (1) см. ЛИНСЕРТ
Показать ещё 5 комментариев
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, поэтому я немного предвзятый.: -)

  • 0
    благодарю вас. Berkeley DB бесплатно для коммерческого использования? (Я не говорю о внедрении его в пользовательское программное обеспечение - я говорю о нашей простой установке и использовании на серверах компании для хранения данных / исследовательских целей)
  • 0
    Вы можете найти информацию о лицензии Berkeley DB здесь: bit.ly/g7h1mf . По сути, BDB является двойной лицензией, аля GPLv2. Под лицензией с открытым исходным кодом он может быть использован бесплатно с открытым исходным кодом проектов. Коммерческая лицензия доступна для приложений с открытым исходным кодом, которые распространяются среди третьих сторон, а также для клиентов, которым требуется поддержка Oracle.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню