banq
2009-04-29 09:10

>网上有谈过读写数据库分离技术,就是写数据放到一个库,读数据放到一个库

很有意思,我们在另外一个帖子也在讨论读写分离,写是写到数据库,用事务,这是共同的,但是区别读,我们是通过在中间件服务器中建立一个跨服务器的大内存缓存(可以想象成另外一个库),这样就巧妙解决复制的即时性和频率问题。

用缓存处理读就是打破数据库的盒子,读写分离不一定要分开两个数据库啊。

详见:http://www.jdon.com/jivejdon/forum/messageList.shtml?thread=36063&message=23121918#23121918

[该贴被banq于2009-04-29 09:10修改过]

usejava
2009-04-29 09:57

需要多少内存?另外当数据库数据变化时,如何同步缓存?

ACoder
2009-04-29 10:41

我没有使用过数据库读写分离的技术,不过从我的经验来想,这种技术大多为了读多写少的应用准备的,是否使用这种技术应当适当考虑一下自己的应用是否是这一类型的。而且这两个数据库之间的同步也是需要成本的,那么用户对于实时性要求是不是很高。这些都是需要考虑的问题。如果数据量不是很大,这个基本上不需要。

ACoder
2009-04-29 10:47

banq说的那种技术不适合这种数据量的访问,最起码现在不适合,首先共享内存肯定需要属于某一个设备,那么设备是否又成为单点,其二这种技术的备份策略以及冗余策略有待于考察,如果数据量很大,那么怎么备份,全备份还是增量备份??如果一旦有内存出现故障怎样进行保证数据完整性。

banq
2009-04-29 11:04

>当数据库数据变化时,如何同步缓存

数据库数据为什么会变化,首先因为是缓存里对象发生变化,所以,缓存变化是在数据库变化之前,一定要改变这种习惯思维。

那么如何更新缓存中变化的对象,那么就涉及到了我们正在讨论的那个帖子:http://www.jdon.com/jivejdon/thread/36063.html

一定要清楚了解缓存中保存的不是碎片数据,而是反映需求核心模型的聚合根实体和它的边界内子对象群,所以,同步缓存这些对象群时,遵循DDD要求的不变性和一致性。

当更新完成内存中聚合对象群以后,再通过一个专门机制sync将数据库向缓存看齐,更新数据库。

>共享内存肯定需要属于某一个设备,那么设备是否又成为单点

我们有分布式缓存 集群就是本质上分布式缓存,几台服务器内存集群在一起,就象一块大内存,任何一个点失败,都没有单点风险,其他机器顶上。

>这种技术的备份策略以及冗余策略有待于考察

缓存本身就解决了冗余,因为缓存里保存的是领域核心模型,是经常使用的,聚合边界就是解决冗余,保持精简模型。

16Go 上一页 1 2 3 4 5 6 ... 16 下一页