TLDR:使用内存数据库与锁和并发数据结构的优缺点是什么?
我目前正在开发一个具有许多(可能是远程)显示器的应用程序,这些显示器从多个数据源收集实时数据并实时在屏幕上呈现它们.其他开发人员之一建议使用内存数据库而不是我们其他系统行为的标准方式,即使用并发哈希映射,队列,数组和其他对象来存储图形对象并安全地处理它们必要时锁定.他的论点是数据库将减少担心并发性的需要,因为它将自动处理读/写锁,并且DB将提供一种更简单的方法将数据结构化为我们需要的尽可能多的表,而不是创建的哈希映射列表等的哈希映射并跟踪所有内容.
我自己没有太多的数据库经验,所以我向SO用户询问他们有什么经验以及将DB插入系统的优缺点是什么?
一个主要的骗局是Java和DB之间的不匹配.如果你不需要它,那将是一件非常令人头痛的事.对于非常简单的访问,它也会慢得多.另一方面,在崩溃的情况下,好处是文件系统的事务和持久性.此外,根据您的需要,它允许以可能难以使用常规Java数据结构的方式进行查询.
对于介于两者之间的东西,我会看看Neo4j.它是一个纯Java图形数据库.这意味着它易于嵌入,处理并发和事务,可以很好地扩展,并且没有关系数据库所具有的所有不匹配问题.
更新如果您的数据结构足够简单 - 列表地图,地图地图等,您可以使用JDK或Google Collections中的并发集合,但除此之外,您可能会发现自己重新创建内存数据库.如果您的查询约束甚至是非常困难的,那么您将不得不自己实现所有这些设施.然后你必须确保它们同时工作等.如果这需要任何严重的复杂性或规模(大型数据集),我绝对不会自己推动,除非你真的想要承诺它.
如果您决定使用嵌入式数据库,那么有很多选择.您可能希望首先考虑是否要使用SQL或NoSQL路由.除非你看到SQL的真正好处,否则我认为这也会大大增加你应用的复杂性.Hibernate可能是你用最少的实际SQL最简单的路径,但它仍然令人头痛.我在没有严重问题的情况下完成了Derby,但它仍然不是直截了当的.您可以尝试db4o,这是一个可以嵌入的对象数据库,不需要映射.这是一个很好的概述.就像我之前说过的那样,如果我可能会尝试Neo4j,那就是我,但那可能就是我想要玩新的闪亮的东西;)我只是把它视为一个非常透明的库,这是有意义的.Hibernate/SQL和db4o似乎太挥手了,感觉轻巧.