复杂的控制依赖于内存还是数据库?
我在研究一个产品时形成了两种方案:
方案一:xml配置脚本文件拆分成数据库库表,控制依赖于存在于库表的节点的状态信息并以及存放在库表中逻辑关系。
方案二:xml文件映射到java数据结构中,控制依赖于数据结构的状态以及数据结构中的逻辑关系,数据库作为当前运行数据的备份(用来恢复中断的运行)以及存放运行历史。
数据量分析:
要求支持上万个节点的控制,逻辑比较简单,并发量比较大,对性能、稳定性要求很高。
分析:
方案一:控制的逻辑依赖于数据库。问题在于数据库和程序是两个部件,需要将xml脚本拆分成不同的库表,用以表示其复杂的控制逻辑;控制的过程中程序需要不断轮询数据库中存放的状态信息。
方案二:控制的逻辑依赖于内存中的数据结构,以内存为主。需要将xml脚本映射成内存数据结构,逻辑控制根据该数据结构保存每个节点的状态进行控制。外部的对其控制根据这个数据结构的状态,为了做断点恢复,需要将内存的数据保存一份冗余到数据库中。库表结构会比较简单,记录的是运行的状态信息(xml不需要拆分成难以表达的库表结构),所有的状态变化需要经过该数据结构,节点状态的变化触发的事件可以主动通知,而不需要轮询,效率(放在内存中)以及控制的方便应该更好一些?
问题:
请问大家是如何看这个问题?选择一还是二或者其他?
------解决方案--------------------要求支持上万个节点的控制,逻辑比较简单,
需要将xml脚本拆分成不同的库表,用以表示其复杂的控制逻辑
说法怎么就冲突了呢
--------------------------------------------------
个人感觉,,内存缓存是需要的。倒是 xml和数据库二选一就行。
------解决方案--------------------按照你的说法,方案二为最优
具体原因可以从成本和系统稳定两个方面来考虑
------解决方案--------------------可能要做cache,储存使用最多的关键字.
而且要看这些数据的查询方式,如果查询方式复杂,自然选数据库,xml查询效率极低。
有钱的话可以考虑oracle,好像新版有xml数据库功能。
------解决方案--------------------Apache Xindice
------解决方案--------------------根据你的描述,感觉xml文件拆分成两三个表就可以了啊,一个存逻辑关系,一个存节点属性。
缓存分两块,一块就是逻辑关系,可以转为树形结构(森林),这个根据你对逻辑关系的查询频率来设定,看是不是需要。
一块以节点为单位缓存节点属性,类似于内存与虚拟内存的页面调转。