一个话题topic对象,有很多属性,比如:主键id、回复数replyCount、标题title、楼层数floor、浏览数views等等,相对应的,数据库里面也有一个topic表,保存这些属性字段。topic对象放在缓存里,缓存找不到,再去DB找。当topic对象有属性更改时,清空缓存,以保证数据一致性。
下面主要说说浏览数views和回复数replyCount这两个属性是怎么读写分离的,下面的"帖子"也就是"话题"的意思。
对于论坛来说,一般网友只是看帖不回帖,也就是说,一个帖子对象,大多数情况下,只有views这个字段值被频繁地增加,如果每次DB里面views增加1都要清空topic缓存的话,下次找topic对象,缓存找不到,再去DB找,多少会增加服务器负担。
一个改进的作法是
(1)另外建一个表,比如叫topic_counter,保存topic的主键id和总的浏览数count
(2)用一个缓冲区计数器count,每次帖子页面刷新,缓冲计数器count+1,增加缓存中topic的浏览数,而页面读取浏览数,也只是到缓存里面读
(3)帖子页刷新到一个指定的数量比如400之后,就是说缓冲区计数器count等于400的时候,把缓存中的记录直接同步到DB的topic_counter表中,然后用定时任务(独立于web程序之外的groovy脚本之类),把topic_counter表的浏览数count同步到topic表的views字段中。
或者,缓冲区计数器count刷新到400之后,把缓存中浏览数的记录写到一个文件上,然后再用定时任务同步文件的数据到topic_counter表和topic表中。定时任务可以每15分钟跑一次。
(4)最后,缓冲区计数器count重置为0,重新开始计数。
(5)页面显示浏览数的时候,可以用js后出的方式显示,以便加快页面加载速度。
上面为了读取帖子性能增强,关于帖子浏览数的读写操作确实有点绕,也是无奈做法,当然,可能还更好的方案,暂时没研究那么深入。这个方案的帖子浏览数数据可能是不准确的,比如说断电缓存丢失什么的,对于论坛这种数据准确性要求不是很高的情况下,是可以接受的。
还有,数据量大的时候,还有注意topic分表和topic_counter分表的准确性。
相关推荐
1. 数据库复制:设置数据库镜像或读写分离,将读操作分散到多个副本服务器上。 2. 异步处理:对于非实时性的写操作,可采用异步方式,先暂存本地,再定时批量上传。 3. 预加载数据:在客户端预加载部分常用数据,...
本话题关注的是如何使用Java处理FSN文件,将其解析成对象并由对象转换回FSN文件。以下是关于这个主题的详细知识点: 1. **FSN文件格式**: 冠字号文件通常包含每张纸币的冠字号码、交易时间、交易金额、设备编号等...
【描述】:该简易论坛的设计理念是简洁易用,其核心技术栈包括Model-View-Controller(MVC)设计模式,这是一种广泛应用于Web开发的架构模式,能够有效地分离业务逻辑、数据处理和用户界面。在本项目中,Model层主要...
读写分离是提高数据库性能的常用手段,通过主从复制实现读操作在从库上执行,减轻主库压力。面试中可能会问及如何配置和维护主从复制,以及在读写分离环境下如何处理写操作的同步问题。 ### JVM内存结构 Java虚拟机...
9. **性能优化**:为了应对高并发访问,BBS系统可能需要进行缓存策略(如Redis)、负载均衡、数据库读写分离等性能优化。同时,定期进行性能测试和监控,确保系统稳定运行。 10. **社区管理**:BBS通常设有管理员和...
- 数据库连接管理:智能选择最佳数据库连接,如读写分离。 3. 使用DB助手: 要使用`dbhelper`,首先需要将包安装到项目中,通常通过Composer完成。然后,需要配置服务提供者和服务别名,以便在整个应用中访问助手...
3. **数据库读写分离**:主从复制实现读写分离,减轻主数据库压力。 八、论文部分 论文通常会详细阐述系统的设计思路、架构选择、关键技术实现以及遇到的问题和解决方案,是理解和复现项目的重要参考资料。 总的来...
在转型过程中,技术架构需要实现异步化操作、分布式缓存、网络接入点、消息队列、数据库读写分离、横向和纵向的数据切分等目标。这些目标能够帮助系统更好地处理业务需求,提供流畅的页面访问和更佳的用户体验。 ...
- **板块划分**:根据不同的技术领域或话题类型,将论坛分为多个板块,便于用户快速找到感兴趣的内容。 - **系统管理**:包括用户管理、帖子管理等后台管理功能,以保证论坛的正常运行。 #### 三、系统架构设计 - ...
Java面试问题指南 Java作为一款广泛应用的编程语言,其面试环节常常包含了大量的技术问题,旨在评估候选人的基础知识、编程能力...对于每个话题,都有更深入的理论和技术细节,建议结合实际编程经验进行学习和实践。
6. **数据库优化与数据分片**:随着流量的增长,单一数据库可能无法胜任,此时需要考虑数据库的读写分离、主从复制,甚至数据分片策略,以确保数据的高效访问和存储。 7. **负载均衡与容灾**:通过负载均衡技术,如...
- **数据库性能优化**:查询优化、索引策略、分区表、读写分离等。 - **NoSQL数据库**:如MongoDB、Cassandra,非关系型数据库在大数据和分布式场景下的应用。 - **Spring Data JPA**:Spring框架中的数据访问...
在大数据量的场景下,可能还需要使用到分库分表、读写分离等策略。 除此之外,版本控制工具如Git是协同开发的基础,开发者需要熟练使用分支管理和合并操作。持续集成/持续部署(CI/CD)工具如Jenkins、GitLab CI/CD...
3. **DAO(Data Access Object)模式**:DAO模式是一种设计模式,用于封装对数据库的操作,使业务逻辑与数据访问逻辑分离,提高代码可维护性和可测试性。 4. **JDBC批处理**:对于大量相似的数据库操作,批处理能...
此外,数据库优化也是面试中的常见话题,包括SQL优化、存储引擎选择、读写分离策略等。 总之,Java开发者需要深入理解JVM的工作原理,熟练掌握Spring框架的使用,具备分布式系统的理论基础,以及扎实的数据库管理...
7. 事件驱动编程:VB的事件驱动模型使得用户界面与业务逻辑分离,当特定事件发生(如按钮点击)时,对应的事件处理程序会被调用。 8. 文件操作:VB提供了丰富的文件处理功能,如打开、读写、关闭文件,以及处理文本...
- 数据库优化:查询优化、索引策略、事务处理、读写分离。 5. **其他高级话题**: - 多线程:线程创建、同步机制(synchronized、Lock)、死锁、线程池。 - 并发编程:并发容器(ConcurrentHashMap、...
3. 分布式数据库:主从复制、分片、读写分离等。 十、网络编程 1. TCP/IP协议:了解网络七层模型,TCP与UDP的区别。 2. HTTP协议:请求方法、状态码、报文结构。 3. Socket编程:创建服务器和客户端,进行数据交换...
6. **文件操作与数据库访问**:介绍VB.NET中读写文件的API,以及如何连接和操作SQL Server、Access等数据库。 7. **高级话题**:可能包括线程处理、网络编程、XML处理、反射等进阶主题。 而压缩包中的“桌面管理...
- 使用`File`类可以进行目录列举、文件存在判断、读写文件等操作。 4. **Java多态**: - 多态的实现通过继承、方法重载(方法名相同,参数不同)和方法覆盖(子类重写父类方法)。 5. **编码转换**: - `new ...