`
myreligion
  • 浏览: 205187 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对于应用高并发,DB千万级数量该如何设计系统哪?

    博客分类:
  • Java
阅读更多
背景:  博客类型的应用,系统实时交互性比较强。各种统计,计数器,页面的相关查询之类的都要频繁操作数据库。数据量要求在千万级,同时在线用户可能会有几万人活跃。系统现在是基于spring + hibernate + jstl + mysql的,在2千人在线,几十万记录下没有什么压力。可对于千万记录以及数万活跃用户没什么经验和信心。  对于这些,我的一点设计想法与问题,欢迎大家指导:    一. 加强cache    由于web2类型的网站,用squid反向代理可能不是很适用;由于这种情况下需要cluster,jvm上作过多cache可能会引起其他问题;所以比较合适的应该是采用静态发布的方式,把数据发布成xml文件,然后通过xml + xslt 拼接各模块(div)显示。(直接发布成html文件用jstl感觉不是很方便,也没用过,请有经验的介绍下),主要目的就是把压力拦截在Apache上。或者用memcached cache文章内容,用户资料等对象。  二. 数据库分库    分库有两种,一种是分表,把经常访问的放一张表,不常访问的放一张表。 好比对于博客,文章表可以分为文章基本信息(标题,作者,正文……)不常改动的信息,和文章统计信息(阅读次数,评论次数……)经常变动的信息,以期望update统计信息之类的可以快一点(这个东西实践起来弊端也会比较明显:查询文章时需要多查询一次统计信息表,到底能不能提高性能还没有具体数据,欢迎有经验的给点数据:) )。 对于记录过多,好比千万级,这样的分法显然也解决不了问题,那么就需要归档处理了。归档大致就是创建一个同样的表,把旧内容(好比三个月以前的)都移到旧表里面,保持活跃的表记录不多。(mysql本身有一个archive引擎,看资料感觉对解决大量数据没什么用处,连索引都不支持,用过的朋友可以给点建议)。归档带来的最大问题就是:归档以后的数据如何访问哪?如果用户要访问以前的数据就会比较麻烦了。(mysql的merge查询?)大家这方面有没有好的practice?我还没想到好的办法。 分库的另外一种方式是物理的分,就是装他几十台mysql服务器,然后按照某种方式把数据分散到不同的服务器上,这种方式也有利于备份恢复和系统的稳定性(一台数据库宕了,也只会影响一部分功能或用户)。例如对于博客应用,比较理想的分库模式可以按照用户分,好比我把用户id在1…10万的资料都存到mysql1上,把10万。。。20万的存到mysql2….,依次类推,通过线性增加服务器的方式解决大数据问题。 呵呵,还算完美吧~~,就是给统计排名带来了麻烦…… 按照第二种分库方式,数据库连接将发生变化,如果数据达到千万,10几个mysql应该是需要的,这时候连接池就要废掉了,采用每次查询取链接的方式。或者需要改造出一个特别的连接池了。  三.采用Ibatis    把hibernate废掉,改用ibatis,毕竟ibatis可以很方便的进行sql优化,有什么问题优化起来方便多了(还没有用过ibatis,只是感觉)。另一方面,如果物理分库有效果,好像严格的sql优化意义也就不大了。这应该也是一个优化方面。   总结一下我的结构:把文章,用户资料,各种分类,tag, 链接,好友之类的进行静态化(xml + xslt 读取显示) + 物理分库 + ibatis sql优化 + JVM短暂性的cache总的用户数,在线用户数等极个别数据,其他的全部不cache(包括关闭hibernate二级缓存,如果用hibernate)
分享到:
评论
6 楼 pi1ot 2006-12-14  
没用过java,表是肯定要分的,具体怎么分要看你们的具体应用需求,分表后对外的读取接口可以封装起来,内部处理数据定位问题。cache尽量走内存少走文件,否则数量和访问量上去以后io也够受的。系统的几大模块间尽量独立,互相用消息队列异步通信。
5 楼 myreligion 2006-12-13  
我以前用httpclient读页面,然后写成本地文件,少量的效果还不错(速度和静态页面效果都不错)。项目要定时循环读,结果后来因为任务多了quartz调度不了那么快,造成内存溢出。
4 楼 myreligion 2006-12-13  
zelsa 写道
MySQL 5.1已经支持表分区了,拿100万行的表测试过(采用的是HASH),查询速度非常理想。


去mysql网站看了一下,PARTITION 的确很强,可以很好的利用磁盘,也方便mysql进行优化。待成熟后可以尝试使用到mysql节点上。

mysql帮助文档:http://dev.mysql.com/doc/refman/5.1/zh/partitioning.html#partitioning-types
3 楼 together 2006-12-13  
可以使用velocity模板,直接发布为html。

另外,je2里面有很多静态页面,不知道是如何自动生成的。看起来效果不错。
http://www.iteye.com/static.html
2 楼 zelsa 2006-12-13  
MySQL 5.1已经支持表分区了,拿100万行的表测试过(采用的是HASH),查询速度非常理想。
1 楼 rtdb 2006-12-13  
各个博客之间没什么关系,采用分库+分表的方法应该是比较好的。
都不用按常用不常用分,简单地将博客分组就好了。

另外,因为业务逻辑比较简单,要处理千万记录以及数万活跃用户,
我觉得还是用JDBC+mysql,自已从头构建一个应用服务器更好些。。

相关推荐

    Java系统的高并发解决方法详解

    Java系统的高并发解决方法详解 ...Java系统的高并发解决方法可以通过静态化、图片服务器分离、数据库集群和库表散列、缓存等多种方法来实现,选择哪种方法需要根据实际情况进行选择和组合,以提高系统的性能和扩展性。

    开涛高可用高并发-亿级流量核心技术

    1 交易型系统设计的一些原则 2 1.1 高并发原则 3 1.1.1 无状态 3 1.1.2 拆分 3 1.1.3 服务化 4 1.1.4 消息队列 4 1.1.5 数据异构 6 1.1.6 缓存银弹 7 1.1.7 并发化 9 1.2 高可用原则 10 1.2.1 降级 10 1.2.2 限流 11...

    高并发性的设计和优化

    ### 高并发性的设计与优化 #### 数据库设计 数据库设计是实现高并发系统的关键步骤之一,主要...以上介绍的方法和技术只是实现高并发系统的一部分,实际应用中还需要结合具体的业务场景和技术栈进行综合考虑和设计。

    GaussDB工作级开发者认证

    GaussDB是由华为基于openGauss自研生态开发的分布式关系型数据库,它专为企业级复杂事务处理设计,具有高性能、高可用性和高扩展性的特点。 在性能方面,GaussDB通过分布式执行框架、GTM-Lite技术和NUMA-Aware事务...

    循序渐进DB2.DBA系统管理、运维与应用案例-web(完整书签)

    IBM DB2是一种关系型数据库管理系统(RDBMS),广泛应用于企业级数据处理领域。它支持多种操作系统,包括Windows、Linux以及各种UNIX平台。DB2不仅具备传统的关系型数据库功能,还支持XML、JSON等非结构化数据的存储与...

    高性能高并发服务器架构大全

     对于应用高并发,DB千万级数量该如何设计系统哪? 125  高性能服务器设计 130  优势与应用:再谈CDN镜像加速技术 131  除了程序设计优化,zend+ eacc(memcached)外,有什么办法能提高服务器的负载能力呢...

    数据库原理与DB2应用教程

    DB2是IBM开发的一款关系型数据库管理系统,广泛应用于企业级应用,具有高性能、高可用性和安全性等特性。 本教程《数据库原理与DB2应用教程》主要针对学生,旨在深入理解数据库基本概念和DB2的具体应用。以下是该...

    DB2和 Oracle的并发控制(锁)比较

    在数据库管理系统中,并发控制是确保多用户环境下数据一致性与完整性的关键机制。DB2和Oracle都是广泛应用的关系型数据库,...在设计和优化数据库应用时,需要根据具体的业务需求和系统负载选择合适的并发控制策略。

    TIA博途中如何建立上升沿FB库实现多重调用,从而减少使用背景DB块的数量?.docx

    在TIA博途中,建立上升沿FB库是为了高效地处理信号的上升沿事件,并通过多重调用来减少背景DB块的数量,...在实际应用中,这种优化技术对于大型控制系统尤其重要,因为它可以显著降低程序资源的占用,提高系统性能。

    互联网高并发架构设计说明.pdf

    互联网高并发架构设计说明 本文档旨在讨论互联网高并发架构设计的关键点,并提供了一些实践方案来解决高并发问题。高并发经常会发生在有大活跃用户量、用户高聚集的业务场景中,如秒杀活动、定时领取红包等。在电商...

    Java RocksDB安装与应用

    Java RocksDB是一种可嵌入的、持久性的key-value存储系统,它具有高性能、快速存储、可适配性和基础高级数据库操作等特点。RocksDB可以在Java中使用,安装和应用方式有多种,包括编译安装、pyrocksDB安装和maven...

    互联网高并发架构设计.docx

    在互联网行业中,高并发架构设计是一项至关重要的任务,特别是在安卓应用和电商平台等用户基数庞大的领域。高并发场景通常出现在大型活动、秒杀促销或红包领取等业务中,这些场景需要系统能够平稳处理大量同时发生的...

    DB2和 Oracle的并发控制

    【并发控制】在数据库系统中,特别是在DB2和Oracle这样的大型企业级数据库中,是确保多用户环境下数据一致性的重要机制。并发控制通过引入【锁】技术来防止事务间的冲突,保证ACID特性得以实现,即原子性(Atomicity...

    阿里P8架构师谈:高并发架构解决方案总结

    高并发是指在同一个时间点,有很多用户同时访问URL地址,比如:淘宝的双11、双12,就会产生高并发。又如贴吧的爆吧,就是恶意的高并发请求,也就是DDOS攻击。服务端:导致站点服务器/DB服务器资源被占满崩溃,数据的...

    深圳地方标准《 金融自助终端应用系统技术要求》DB4403_T 128-2020.pdf

    深圳市地方标准《金融自助终端应用系统技术要求》DB4403_T 128-2020主要规定了金融自助终端应用系统的定义、技术架构、应用系统技术要求以及安全性要求等方面的内容。该标准适用于金融自助终端应用系统的设计、测试...

    深入解析DB2--高级管理,内部体系结构与诊断案例.part1.rar

    6.3 监控和调优DB配置参数 6.4 调整DB2概要注册变量 6.5 内存自动调优 6.6 总结 第7章 锁和并发 7.1 锁等待及调整案例 7.2 锁升级及调整案例 7.3 死锁及调整案例 7.4 隔离级别与锁 7.5 最大化并发性 7.6 锁相关的...

    基于SpringBoot实现Java高并发之秒杀系统.zip

    基于SpringBoot实现Java高并发之秒杀系统 技术栈 后端: SpringBoot-2.x + Redis-4.x 前端: Bootstrap + Jquery 测试环境 IDEA + Maven-10.13 + Tomcat8 + JDK8 启动说明 启动前,请配置好 application.yml ...

    DB2 基础---DB2进程

    DB2是IBM开发的一款关系型数据库管理系统,广泛应用于企业级数据存储和管理。在DB2系统中,进程扮演着至关重要的角色,它们是系统运行的基础,负责执行SQL语句、管理内存、处理并发请求以及与操作系统进行交互。下面...

    基于SpringBoot的Java高并发秒杀系统,优秀毕业设计,新手必看!

    启动前,请创建数据库`seckill`,建表SQL语句放在:/db/sys_schema.sql。具体的建表和建库语句请仔细看SQL文件。 配置完成后,运行位于 `src/main/cn/tycoding/`下的SpringbootSeckillApplication中的main方法,...

Global site tag (gtag.js) - Google Analytics