Рекомендации для в базе данных памяти по сравнению с ориентированными на многопотоковое исполнение структурами данных

TLDR: Что профессионалы/недостатки использования являются базой данных в оперативной памяти по сравнению с блокировками и параллельными структурами данных?

Я в настоящее время работаю над приложением, которое имеет многих (возможно удаленный) дисплеи, которые собирают живые данные от нескольких источников данных, и представляет их на экране в режиме реального времени. Один из других разработчиков предложил использование в базе данных памяти вместо того, чтобы делать его стандартный способ, которым ведут себя наши другие системы, который должен использовать параллельный hashmaps, очереди, массивы и другие объекты хранить графические объекты и обработку их безопасно с блокировками при необходимости. Его аргумент - то, что DB уменьшит потребность волноваться о параллелизме, так как это обработает блокировки чтения-записи автоматически, и также DB предложит более легкий способ структурировать данные в столько таблиц, сколько мы должны вместо наличия создать hashmaps hashmaps списков, и т.д. и отслеживания всего этого.

У меня нет большого опыта DB самого, таким образом, я спрашиваю товарища ТАК пользователи, что испытывает, они имели и каковы профессионалы и недостатки вставки DB в систему?

9
задан z - 26 March 2010 в 11:38
поделиться

5 ответов

Что ж, главным недостатком было бы несоответствие между Java и БД. Если вам это не нужно, это большая головная боль. Это также было бы намного медленнее для действительно простого доступа. С другой стороны, преимущества будут заключаться в транзакциях и сохранении файловой системы в случае сбоя. Кроме того, в зависимости от ваших потребностей, он позволяет выполнять запросы таким способом, который может быть трудно сделать с обычной структурой данных Java.

Что-то среднее, я бы взглянул на Neo4j . Это чистая графическая база данных Java. Это означает, что он легко встраивается, обрабатывает параллелизм и транзакции, хорошо масштабируется и не имеет всех проблем несоответствия, которые есть у реляционных БД.

Обновлено Если ваша структура данных достаточно проста - карта списков, карта карт или что-то в этом роде, вы, вероятно, сможете обойтись либо параллельными коллекциями в JDK, либо Коллекциями Google , но гораздо больше, и вы, вероятно, обнаружите, что воссоздаете базу данных в памяти. И если ваши ограничения запроса даже отдаленно сложны, вам придется реализовать все эти возможности самостоятельно. И тогда вам нужно будет убедиться, что они работают одновременно и т. Д. Если для этого потребуется серьезная сложность или масштаб (большие наборы данных), я определенно не буду катить ваши собственные, если вы действительно не хотите делать это.

Если вы все же решили использовать встроенную БД, есть несколько вариантов. Возможно, вы захотите начать с рассмотрения того, хотите ли вы пойти по маршруту SQL или NoSQL. Если вы не видите реальных преимуществ перехода на SQL, я думаю, это также значительно усложнит ваше приложение. Hibernate, вероятно, ваш самый простой путь с наименее актуальным SQL, но это все еще какая-то головная боль. Я проделал это с Derby без серьезных проблем, но это все еще непросто. Вы можете попробовать db4o , объектную базу данных, которая может быть встроена и не требует сопоставления. Это хороший обзор. Как я уже говорил ранее, если бы это был я, то, вероятно, я бы попробовал Neo4j, но это могло бы быть просто моим желанием поиграть с новыми и блестящими вещами;) Я просто рассматриваю это как очень прозрачную библиотеку, которая имеет смысл. Hibernate / SQL и db4o кажутся слишком легкими для понимания.

5
ответ дан 4 December 2019 в 21:09
поделиться

Мне непонятно, почему вы считаете, что база данных в памяти не может быть потокобезопасной.

Почему бы вам не взглянуть на JDO и DataNucleus? У них есть много разных хранилищ данных, куда вы можете подключить то, что ваш внутренний поставщик сохраняемости во время выполнения, в качестве шага настройки. Код вашего приложения зависит от ORM, но этот ORM может быть подключен к СУБД, DB40, NeoDatis, LDAP и т. Д. Если один бэкэнд у вас не работает, переключитесь на другой.

-1
ответ дан 4 December 2019 в 21:09
поделиться

Вы можете использовать что-то вроде Space4J и получить преимущества как интерфейса, подобного коллекциям, так и базы данных в памяти. В практическом использовании такая базовая вещь, как коллекция представляет собой базу данных в памяти без индекса. Список - это база данных в памяти с одним индексом int. Карта - это база данных в памяти с единственным индексом типа T и без параллелизма, если только не синхронизирована или не реализована java.util.concurrency.*.

4
ответ дан 4 December 2019 в 21:09
поделиться

Ниже приведены несколько вопросов, которые могут облегчить принятие решения.

  • Запросы - нужно ли вам запрашивать / перепроектировать / агрегировать ваши данные в различных формах?
  • Транзакции - вам когда-нибудь нужно откатывать добавленные данные?
  • Постоянство - вам нужно только представить собранные данные или сделать вам также нужно как-то его сохранить?
  • Масштабируемость - всегда ли ваши данные помещаются в память?
  • Производительность - насколько быстро это должно быть?
1
ответ дан 4 December 2019 в 21:09
поделиться

Однажды я работал над проектом, который использовал Oracle TimesTen. Это было еще в начале 2006 года, когда Java 5 была только что выпущена, и классы java.util.concurrent были едва известны. Система, которую мы разработали, имела достаточно большие требования к масштабируемости и пропускной способности (она была одним из основных телекоммуникационных блоков для SMS/MMS-сообщений).

Короче говоря, рассуждения для TimesTen были справедливыми: «Давайте передадим наши проблемы параллелизма / масштабируемости кому-то другому и сосредоточимся на нашей бизнес-области» и тогда имело смысл. Но это было еще в 2006 году. Я не думаю, что такое решение было бы принято сегодня.

Параллелизм сложен, как и обработка баз данных в памяти. Освободив себя от проблем с параллелизмом, вам придется стать экспертом в мире баз данных в памяти. Тонкая настройка TimesTen для репликации сложна (для этого нам пришлось нанять профессионального консультанта из Oracle). Лицензии не предоставляются бесплатно.Вам также нужно беспокоиться о дополнительном слое, который не является открытым исходным кодом и / или может быть написан на другом языке, чем тот, который вы понимаете.

Но действительно трудно сделать какое-либо суждение, не зная своего опыта, бюджета, требований к времени и т. Д. Сделайте покупки, потратьте некоторое время на поиск приличных структур параллелизма (таких как http://akkasource.org/) ... и дайте нам знать, что вы решили ;)

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

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