来源:Redislabs
作者:Shabih Syed

翻译:Kevin (公众号:中间件小哥)

构建在线和运营应用程序的开发团队越来越多地选择一类新的数据库来支持它们。它被称为“NoSQL”或“Not Only SQL”,包括Redis,MongoDB等非SQL数据库。从可用的NoSQL解决方案中选择正确的数据库,是您在设计新应用程序时可以做出的最重要决策之一。因此,如果您正在评估NoSQL数据库,请继续阅读,下面的建议将有助于您的选择。

选择数据库时,您可以遵循以下五个高级步骤:

  1. 定义NoSQL数据库的目标。
  2. 确定吞吐量和延迟要求。
  3. 为项目选择正确的数据库。
  4. 选择 托管服务提供商或自己动手(DIY)之间做出选择。
  5. 确定 适合您情况的最佳部署模式。

1 定义数据库的目标

使用NoSQL数据库的目的可能是:为移动设备上的数以千计的用户提供个性化的数字体验;为处理后端支付的应用程序存储数据; 管理短暂的临时数据;或作为一个记录系统存储持久数据。您甚至可以在特定场景的同一数据管道中涉及多种类型的数据库。 不管你在哪种场景中使用,包括如何收集,提取有用的数据来进行分析和在数据管道中定义NoSQL数据库的特定功能都是非常重要的。

2 确定吞吐量和时延要求

在今天这个时代,用户期待即时体验。通常,这需要您的应用程序的响应时间<100毫秒。否则,它将被认为低效,这样您可能会失去用户的兴趣。但是,一些应用程序 - 例如游戏,通信和金融交易系统 - 要求其数据库的响应时间低至13毫秒。除时延外,您还需要确定吞吐量要求。例如,您的数据库可以同时处理数千个同步数据流,同时时延低至50毫秒或更短吗?了解对数据库的性能要求对于确保用户体验的质量是非常重要的。

3 为项目选择正确的数据库

通常,开发人员选择NoSQL数据库是因为它们需要半结构化或非结构化数据类型,这种存储结构具有灵活性,查询简单,快速的事务响应,可存储大量数据以及通过分布式计算和存储的快速且廉价的可扩展性。您可以通过CAP定理进一步缩小您的选择范围,该定理在维基百科上定义如下:

  • 一致性:所有节点访问同一份最新的数据副本。
  • 可用性:每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据。
  • 分区容错性:即使由于网络问题节点之间有信息丢失或延迟,系统仍然保持继续运行。

根据CAP定理,您可以优先考虑CA,AP或CP。这有助于您确定哪个数据库最适合您的应用程序。

4 在托管服务提供商和自建(DIY)之间进行选择
托管服务解决方案有丰富的经验来处理数据库的日常管理操作。这使您能够专注于自己应用程序的创新,同时提高工作效率。如果您朝这个方向考虑,请选择能够在保证正常运行的情况下,同时可以达到您要求的吞吐量和时延要求的数据库服务提供商。当然,外包可能并非总是如此,在这种情况下,您应该考虑哪个数据库提供商提供的软件版本支持大规模配置,安排和管理容器。请务必检查您最期望的能力,例如可伸缩性,双活部署,吞吐量和时延 - 并在POC测试期间验证它们。

5 确定部署模式
理想情况下,您需要一个数据库提供者,它允许您在您选择的任何环境(无论是公共还是私有)中运行数据库,并完全控制您的数据和配置。您的数据库软件也应该可以作为Docker镜像进行使用,这将允许您的企业开发人员在基于Docker的微服务架构中使用它。如果您使用私有平台即服务(PaaS),请确保您的数据库提供商支持私有PaaS环境中的无缝扩展和轻松高可用性,例如Pivotal,Bluemix,Heroku等。如果选择托管服务提供商,请确认它们支持跨多云的群集部署(包括AWS,Azure和Google)。

正确选择NoSQL数据库的好处

经过深思熟虑的决策的一些优点包括:保证开发,测试和生产环境之间的连续性,缩短产品上市时间。与Docker编排工具集成的高可用性和易扩展性。更快的吞吐量,最小的延迟和保证正常运行时间全球多云部署操作使用托管服务提供商可节省大量成本。

更多优质中间件技术资讯/原创/翻译文章/资料/干货,请关注“中间件小哥”公众号!

选择高性能NoSQL数据库的5个步骤的更多相关文章

  1. dotnet core 使用 MongoDB 进行高性能Nosql数据库操作

    好久没有写过Blog, 每天看着开源的Java社区流口水, 心里满不是滋味. 终于等到了今年六月份 dotnet core 的正式发布, 看着dotnet 社区也一步一步走向繁荣, 一片蒸蒸日上的大好 ...

  2. 选择 NoSQL 数据库需要考虑的 10 个问题

    那么我为什么要写这篇文章呢? 是因为我认为NoSQL解决方案不如RDBMS解决方案吗?当然不! 是因为我专注于SQL的做事方式,而不想陷入一种相对较新的技术的不确定性吗?不,也不是!事实上,我非常兴奋 ...

  3. NoSQL数据库介绍

    NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面.今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于N ...

  4. 高性能nosql ledisdb设计与实现(1)

    ledisdb是一个用go实现的基于leveldb的高性能nosql数据库,它提供多种数据结构的支持,网络交互协议参考redis,你可以很方便的将其作为redis的替代品,用来存储大于内存容量的数据( ...

  5. 关系数据库&amp;&amp;NoSQL数据库

    在过去,我们只需要学习和使用一种数据库技术,就能做几乎所有的数据库应用开发.因为成熟稳定的关系数据库产品并不是很多,而供你选择的免费版本就更加少了,所以互联网领域基本上都选择了免费的MySQL数据库. ...

  6. 关系数据库&&NoSQL数据库

    在过去,我们只需要学习和使用一种数据库技术,就能做几乎所有的数据库应用开发.因为成熟稳定的关系数据库产品并不是很多,而供你选择的免费版本就更加少了,所以互联网领域基本上都选择了免费的MySQL数据库. ...

  7. 发布一个参考ssdb,使用go类似的实现redis高性能nosql:ledisdb

    起因 ledisdb是一个參考ssdb.採用go实现,底层基于leveldb,相似redis的高性能nosql数据库,提供了kv,list,hash以及zset数据结构的支持. 我们如今的应用极大的依 ...

  8. 发布一个参考ssdb,用go实现的类似redis的高性能nosql:ledisdb

    起因 ledisdb是一个参考ssdb,采用go实现,底层基于leveldb,类似redis的高性能nosql数据库,提供了kv,list,hash以及zset数据结构的支持. 我们现在的应用极大的依 ...

  9. Amazon DynamoDB, 面向互联网应用的高性能、可扩展的NoSQL数据库

    DynamoDB是一款全面托管的NoSQL数据库服务.客户能够很easy地使用DynamoDB的服务.同一时候享受到高性能,海量扩展性和数据的持久性保护. DynamoDB数据库是Amazon在201 ...

随机推荐

  1. Java 调式、热部署、JVM 背后的支持者 Java Agent

    我们平时写 Java Agent 的机会确实不多,也可以说几乎用不着.但其实我们一直在用它,而且接触的机会非常多.下面这些技术都使用了 Java Agent 技术,看一下你就知道为什么了. -各个 J ...

  2. eclipse中SpringBoot的maven项目出现无法解析父类的解决办法

    在eclipse中建立SpringBoot的maven项目时,继承父类,添加如下代码: <parent> <groupId>org.springframework.boot&l ...

  3. 线上问题排查神器 Arthas

    线上问题排查神器 Arthas 之前介绍过 BTrace,线上问题排查神器 BTrace 的使用,也说它是线上问题排查神器.都是神器,但今天这个也很厉害,是不是更厉害不好说,但是使用起来非常简单.如果 ...

  4. Visual Studio Code安装Python环境

    如何在全宇宙最强编辑器安装Python运行环境 (雾 首先安装Python2和Python3,如果只需要用到一个的话,直接安装即可运行,不存在转换问题. 安装Python扩展,直接搜索安装即可. 更改 ...

  5. Egiht(八种方法)

    Problem Description The 15-puzzle has been around for over 100 years; even if you don't know it by t ...

  6. 安卓APP开发简单实例 结对编程心得

    开始说起搞APP开发,自己和小伙伴的编程水平真的很低,无从下手,只有在网上找点案列,学习着怎样开发,结对编程还是面临着许多问题的,大家的水平有所差异和编程风格不同,我们用eclipse做了一个仿微信登 ...

  7. Java8之熟透Lambda表达式

    一.Lambda简述 1.1.Lambda概述 ​ Lambda 表达式可以理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还有一个可以抛出的异常列表. ...

  8. [C++] 类的使用(1)

    1.类的基本思想是数据抽象和封装.数据抽象是一种依赖于接口和实现分离的编程(以及设计)技术. 2.常量对象,以及常量对象的引用或指针都只能调用常量成员函数.因为非常量成员函数有可能修改其作用的对象,与 ...

  9. 使用 Eslint & standard 规范前端代码

    前言 JavaScript的动态语言类型,给它带来了独特的魅力,产生了风格多样的开发范式,同时也带来了一些问题,从运行时常见的 undefined .null 报错,到代码随意的加减分号.换行.空格, ...

  10. 一篇文章了解Redis数据库

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. redis是一个key-value存储系统.它支持存储的value类型相对更多,包括string(字符串).l ...