内存数据库Tokyo Cabinet在电子商务网站中的应用

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

摘自:《信息与电脑》杂志2011年3月刊 数据库技术

 

栾志高 张吉

 

(中博信息技术研究院有限公司 信息应用院,江苏南京210012)

 

摘 要:本文介绍了Tokyo Cabinet内存数据库和配套的Tokyo Tyrant数据库接口。结合电子商务网站新技术背景,分析了这种内存数据库的高并发性、负载均衡和故障转移等特性,以及应用前景和优点。

 

关键词:Tokyo Cabinet;Tokyo Tyrant;内存数据库;Web 2.0;高并发性;电子商务

 

中图分类号:TP39 文献标识码:A 文章编号:1003-9767(2011)03-0092-02

 

1. 引言

 

随着Web 2.0概念的不断发展,电子商务网站更倾向于友好的用户体验。随之改变的设计思路是将用户的操作切割成更细的颗粒操作,并辅助以Ajax、延迟加载、局部刷新等一系列技术手段。通过优化用户的视觉观感和操作体验,改善用户的购物体验,并有效刺激用户消费。

 

在这种思路的指引下,对网站系统的设计要求也变得更高。相对于同样的用户访问量,细化操作颗粒,一方面会降低数据库操作的单次数据流量,另一方面,将对数据库产生更频繁的请求,并发请求将变得更大。在一般情况下,数据库的并发能力是相对固定的,虽然可以通过提升硬件性能或负载均衡等方式来提升,但是会增加系统的复杂程度和投入成本。因此,基于这样的背景,内存数据库的使用变得日益重要。通过内存数据库的高并发能力以及负载均衡等特性,不仅可以有效提升电子商务网站的性能,提升用户体验,还可以在节约成本的前提下有效提高系统的可靠性。

 

2. Tokyo Cabinet内存数据库

 

2.1 什么是内存数据库

 

内存数据库抛弃了磁盘数据管理的传统方式,基于全部或大部分数据都在内存中这样的理念,重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。

 

2.2 内存数据库 Tokyo Cabinet

 

内存数据库Tokyo Cabinet是基于C/C++的开源项目。它包括两个重要的组成部分。一个是数据库内核Tokyo Cabinet和数据库接口Tokyo Tyrant。

 

Tokyo Cabinet是一种DBM数据库,数据是由一系列key-value所组成。它包括了六种数据存储方式,TCHDB(哈希数据库)、TCBDB(B+ Tree数据库)、TCFDB(固定长度的数据库)、TCMDB(内存中的哈希数据库)、TCNDB(内存中的B+ Tree数据库)、TCTDB(表格数据库)。Tokyo Cabinet可以支持每秒10000个并发客户端,以及每秒超过60000次的查询。

 

clip_image002

 

Tokyo Tyrant是Tokyo Cabinet的数据库接口,它为应用程序提供了便捷的数据访问服务。它不仅支持Memcached协议,也可以通过HTTP协议进行数据交换。Tokyo Tyrant可以支持每秒10000个并发请求,吞吐量也超过20000qps,更为重要的是它支持通过主从模式来实现负载均衡,以及热备模式来实现故障转移。

 

3. Tokyo Cabinet在电子商务网站中的应用

 

接下来我们将讨论一下电子商务网站中Tokyo Cabinet的应用前景和应用方式。

 

3.1 提高系统的并发性

 

3.1.1 使用Tokyo Cabinet和Tokyo Tyrant提高吞吐量

 

在传统的电子商务网站中,更多的采用是三层体系。在数据层中,主要是数据的一次性获取,以及数据级缓存。在业务层和展现层中多采用页面级缓存或静态化等技术。而现在随着延迟加载和AJAX等技术的应用,页面的每一次加载时需要查询数据库的事务数明显增多,并且每次请求所获取的数据流明显减少。这就意味着在单台数据库可以服务的事务数固定的情况下,数据库可以支持的用户数明显减少。正因这样的原因,许多大型的网站,包括电子商务和SNS网站,正在借助内存数据库来大幅提高并发能,而Tokyo Cabinet和Tokyo Tyrant就是很好的选择。

 

图2中,分析比较了Memcached、MySQL+Memcached和Tokyo Tyrant这三者的TPS(每秒事务数)。MySQL+Memcached是现在很多网站所采用的,MySQL作为后端数据存储,Memcached用于前端数据缓存。在相同线程数的情况下,Tokyo Cabinet+Tokyo Tyrant的TPS约是MySQL+Memcached的2倍左右,略差于纯内存形式的Memcached。考虑到纯内存的Memcached没有数据持久化的功能,Tokyo Tyrant+Tokyo Cabinet在平衡数据存储和并发性能方面做的是比较成功的。

 

3.1.2 使用负载均衡提高并发

 

当单台Tokyo Cabinet已经无法满足性能需求时,Tokyo Tyrant提供了更为高级的负载均衡方式。这种模式在传统的MySQL服务器集群中采用的较多,但MySQL的配置较为复杂,而Tokyo Tyrant的配置相对简单。如图3所示,Tokyo Cabinet会通过时间戳来标记数据的版本,通过对Log日志的分发,将增量数据同步到从库中。而应用程序根据操作类型的不同,把写入或读取操作分配在不同的Tokyo Tyrant(主从)上进行。

 

clip_image004

 

clip_image006

 

clip_image008

 

另外,因为Tokyo Tyrant提供了HTTP协议的接入方式,在许多实际应用中,也有通过Nginx在前端建立负载均衡层,然后通过Nginx将不同操作,如写入或是读取,分配给不同的Tokyo Tyrant,甚至可以做到为不同的从库设置权重,以平衡在负载均衡时所需要承担的压力。这种方式的缺点是因为多了Nginx来实现负载均衡,性能上必然有损失。但优点是对于应用程序来说,任何对Tokyo Tyrant的读写操作都是透明的,不需要关心底层的Tokyo Tyrant的个数和主从分配方式。

 

3.2 提高系统的可靠性

 

3.2.1 故障转移模式的应用

 

Tokyo Tyrant也提供了通过热备方式来实现故障转移,对提高网站的可靠性来说非常有用。

 

首先客户端通过Memcached协议的addServer方法,向应用程序的服务器池中添加备份Tokyo Tyrant信息。当客户端应用程序通过Memcached协议向活动Tokyo Tyrant发起访问请求后,Memcached协议会判断活动Tokyo Tyrant是否工作正常,并且反馈给客户端。如果活动Tokyo Tyrant出现故障,那么客户端会从服务器池中调用备份Tokyo Tyrant的连接,经备份Tokyo Tyrant来完成相应的操作。而在这种模式中,两台Tokyo Cabinet的数据是自动同步的,所以相对于应用程序来说,是完全透明的。

 

3.2.2 对大数据文件有可靠支持

 

Tokyo Cabinet在64位的系统上。可以管理的数据量可以达到8EB,而在32位的系统上。可以管理的数据量可以达到8TB,而且在64位的系统中。单个数据库文件的大小也不仅仅限于2GB,可以更大,而且对于文件写入校验也非常灵活和高效,可以在保证性能的前提下,增加文件的可靠性,防止数据库文件的损坏。

 

3.3 降低软硬件投入成本

 

3.3.1 节省购买数据库授权的成本

 

当前主流数据库包括Oracle、Microsoft SQL Server和MySQL,MySQL有免费版本可供使用,但Oracle和Microsoft SQL Server均要购买授权。一方面,相对于MySQL来说,Tokyo Cabinet在性能方面有较大的优势。另一方面,相对于Oracle和Microsoft SQL Server来说,Tokyo Cabinet可以在保证并发性能的前提下,节省一笔可观的授权费用。

 

3.3.2 节省DBA的人力成本

 

从另一个角度来说,许多中小型的电子商务网站,对于数据库的使用仅仅限于一般的应用,换句话说仅仅是数据的存储工具。一般的技术人员在开发的同时,即可对数据库进行简单优化,这些优化已经能满足正常的需求。但是为了深入使用数据库自身的负载均衡、故障转移等功能,需要聘请专门的DBA进行开发、管理和维护。而Tokyo Cabinet和Tokyo Tyrant的维护和应用相当简单,一般的技术人员,经过短期的学习和培训,就可以实现负载均衡和故障转移等功能,甚至可以进行配置优化和二次开发。从这点上来说,把部分数据移植到内存数据库后,在人力成本上并不会有特别的增加。这点对于中小电子商务网站来说非常关键。

 

3.3.3 复用现有的硬件资源

 

Tokyo Cabinet和Tokyo Tyrant安装简单,不需要占用很多的系统的资源,而且在运行中自身占用内存和CPU等核心资源非常有限。因此在负载均衡或是故障转移等模式下,可以将从库或备用库安装在一些负载小的多应用服务器上,达到即节省硬件投入又有效提高可用性和可靠性。

 

3.3.4 开发成本小

 

Tokyo Cabinet和Tokyo Tyrant是完全的开源项目。当前Tokyo Cabinet提供了包括了C、C++、JAVA、.NET、Ruby、Perl甚至PHP的接口类库。而Tokyo Tyrant更可支持Memcached客户端协议,也可以通过HTTP协议进行数据交换。Memcached协议已经有比较高的认可度,相关的接口类库也很成熟,从这点来说,使用Memcached协议来连接Tokyo Tyrant是非常简易的。因此,在电子商务网站的开发和维护时,可以节省很多研发时间,有效地提高投入产出比。

 

4. 结论

 

综上,Tokyo Cabinet和Tokyo Tyrant的组合,构成了一款非常高效的内存数据库。它不仅具备优秀的高并发性能,也具备了一定的高可用性和高可靠性,在系统扩展和维护的简易性上也是可圈可点的。在中小电子商务网站中,可以将常用数据库与Tokyo Cabinet相结合,复杂的业务处理、统计事务等安排在常规数据库上,而将需要进行高速查询的数据分散在内存数据库中,从而使压力得以分散。而且,相对于昂贵的Oracle和Microsoft SQL Server,基于Linux的Tokyo Cabinet和Tokyo Tyrant提供了一种非常好的免费解决方案。

 

参考文献:

[1] 平林幹雄. Tokyo Cabinet: a modern implementation of DBM, online at: http://fallabs.com/tokyocabinet/

[2] Matt Yonkovit. MySQL-Memcached or NOSQL Tokyo Tyrant – part 3, online at http://www.mysqlperformanceblog.com/2009/10/19/mysql_memcached_tyrant_part3/
















本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1643524 ,如需转载请自行联系原作者


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
Cloud Native 关系型数据库 分布式数据库
阿里云牵手海亮科技,共建“教育科技数据库创新应用中心”
海亮科技选择引入阿里云PolarDB开源分布式版(PolarDB for Xscale)数据库,不仅能解决海亮科技数据库业务中面临的可靠性、稳定性问题,也为海亮科技业务的高速发展提供了更好的灵活性和可扩展性。
|
6天前
|
存储 搜索推荐 数据挖掘
数据库的应用
数据库在众多领域发挥着重要作用。在企业管理中,它助力客户关系、人力资源和财务管理,提升决策科学性和效率;金融领域中,银行系统、证券交易和保险行业依托数据库保障交易安全、投资决策及风险管理;医疗行业则通过电子病历管理和数据分析提高诊疗准确性并优化资源配置;电子商务运用数据库实现商品、订单管理和用户行为分析,增强购物体验;教育领域中,数据库支持学生信息、教学资源管理和教育数据分析,促进家校沟通与教学质量提升;科学研究方面,数据库促进数据共享、科研项目管理和深入数据分析,加速科学进步。
13 3
|
9天前
|
Cloud Native 关系型数据库 分布式数据库
阿里云牵手海亮科技,共建“教育科技数据库创新应用中心”
近日,阿里云与世界500强旗下、国内领先的教育服务提供商海亮科技集团(以下简称“海亮科技”)达成合作,联合成立“教育科技数据库创新应用中心”。双方将充分整合优势资源,共同推进教育科技领域的数据库技术研究和国产数据库的应用与发展。
44 7
|
2月前
|
数据采集 Rust 安全
Rust在网络爬虫中的应用与实践:探索内存安全与并发处理的奥秘
【8月更文挑战第31天】网络爬虫是自动化程序,用于从互联网抓取数据。随着互联网的发展,构建高效、安全的爬虫成为热点。Rust语言凭借内存安全和高性能特点,在此领域展现出巨大潜力。本文探讨Rust如何通过所有权、借用及生命周期机制保障内存安全;利用`async/await`模型和`tokio`运行时处理并发请求;借助WebAssembly技术处理动态内容;并使用`reqwest`和`js-sys`库解析CSS和JavaScript,确保代码的安全性和可维护性。未来,Rust将在网络爬虫领域扮演更重要角色。
59 1
|
2月前
|
缓存 前端开发 JavaScript
Rails应用慢如蜗牛?揭开数据库到前端的全方位性能优化秘籍,从此告别龟速加载!
【8月更文挑战第31天】本文探讨了Ruby on Rails应用的性能优化方法,涵盖数据库查询与前端渲染。通过具体代码示例,介绍了如何使用`includes`避免N+1查询问题,利用缓存机制提高效率,以及通过合并和压缩CSS及JavaScript文件优化前端渲染。这些技巧有助于全面提升应用性能和用户体验。
37 1
|
2月前
|
存储 SQL JSON
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
|
22天前
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
43 0
|
2月前
|
存储 C# 关系型数据库
“云端融合:WPF应用无缝对接Azure与AWS——从Blob存储到RDS数据库,全面解析跨平台云服务集成的最佳实践”
【8月更文挑战第31天】本文探讨了如何将Windows Presentation Foundation(WPF)应用与Microsoft Azure和Amazon Web Services(AWS)两大主流云平台无缝集成。通过具体示例代码展示了如何利用Azure Blob Storage存储非结构化数据、Azure Cosmos DB进行分布式数据库操作;同时介绍了如何借助Amazon S3实现大规模数据存储及通过Amazon RDS简化数据库管理。这不仅提升了WPF应用的可扩展性和可用性,还降低了基础设施成本。
56 0
|
2月前
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
41 0

热门文章

最新文章

下一篇
无影云桌面