如何让你的内存中的 NoSQL 数据存储适合企业级应用
对于关注用户体验的每一个Web或移动应用而言,基于内存的NoSQL数据存储系统(例如开源的 Redis和Memcached)正在成为事实标准。由
对于关注用户体验的每一个Web或移动应用而言,基于内存的NoSQL数据存储系统(例如开源的 Redis和Memcached)正在成为事实标准。由于性能、可扩展性和可用性面临的诸多挑战,很多大企业已经在试图采用这些数据库系统。
非常幸运的是,现代编程语言(例如Ruby、Node.js、Python等)和开发平台(例如Rails、Sinatra、Django等)已经内置了很多工具和开发库(libraries)。这些工具和开发库能够有效利用内存数据库的高性能和各种操作命令,能够实现当前流行的多种应用项目。
这些开源的示例项目包括作业管理、论坛、实时分析、Twitter克隆、地理位置搜索以及高级缓存等等。
数据库系统的可用性(availability)、可扩展性(scalability)和性能(performance)对于这些项目的成功至关重要。
本文粗略的介绍如何构建企业真正可用的基于内存的NoSQL数据库,包括一些技巧和建议;这些技巧和建议能够解决云端NoSQL数据库管理面临的七大挑战。
1. 可用性无论你做什么,对于你的应用来说数据必须是时刻可用的。这对于内存数据库尤为重要;因为,如果没有得当的措施,当下面的情形发生时你的数据将会部分或全部丢失:
对于情形1和情形2有两种方式来解决;情形3将在稍后讨论。
一旦程序写的频率增加,你会发现应用服务器写入速度远大于复制的速度,尤其是在主节点和复制节 点存在网络拥堵的情形下。一旦这种情况发生,如果数据集大到一定程度,复制节点很有可能永不再 与主节点同步。
1.确保主存储节点一旦失败就立马切换到备用复制节点。这一般基于成熟健壮的看门狗技术 (watchdog),看门狗持续的监控节点,一旦失败就切换到健康的复制节点。
2.对于你的应用程序而言切换过程要尽量透明;最理想的情况是不需要更改任何配置。更高级的解决方案是仅仅修改DNS中存储节点的IP地址,确保修复过程在几秒钟之内完成。
3.自动切换应当基于Quorum并且是完全一致(fully consistent)或最终一致(eventually consistent)的。讨论下面继续:
网络分裂(network splits)在云中频繁发生,对地球上的分布式存储系统而言也是最复杂的问题。一旦发生分裂,应用程序可能只会发现内存数据库的部分节点;同时,每个内存NoSQL数据库节点也很有可能只能发现一部分的其他节点。
为什么说这是一个非常严重的问题呢?如果你的数据库包含一些隐蔽的设计缺陷,当网络分裂发生时,应用程序很可能会写入错误的节点。这意味着,当情况恢复时,应用程序发起的写入就会丢失。这对基于内存的NoSQL数据库来说这是一个非常有意义的话题,因为基于内存的NoSQL数据库每秒的写操作远大于其他的NoSQL数据库系统。
一个设计得当的基于内存的NoSQL是什么样子的呢?很不幸,你只能从下面两个非常糟糕的候选中选择一个:
注意——在今天的市场上并不存在最终一致(eventually consistent)的基于内存的NoSQL数据库,所以只有选项1是可以实际应用的方案。
3. 数据持久化尽管基于内存的NoSQL解决方案提供多种复制选择,你仍需要着重考虑数据持久化和备份,原因如下:
现在你已经确信数据持久化是必要的,在大多数云环境中你应当使用附属在云主机上的存储设备(像AWS的EBS、Azure的Cloud Derive等)。如果你将数据保存在本地硬盘,,当遇到节点故障时你就会丢失数据。
一旦数据得到持久化保存,你最大的挑战将变成:在将改变实时写入到持久化存储的同时保证内存NoSQL数据库的速度。
4. 稳定的性能基于内存的NoSQL数据库(例如Redis和Memcached)的设计目标是:在毫秒延迟内,每秒钟能够处理超过10万个请求。但是,这个数字在云环境下是很难达到的,除非你遵循以下的原则:
5. 网速大多数云主机都配置了一块1Gbps网卡。在基于内存的NoSQL数据库中,该网卡需要完成以下操作:
这很容易成为运行的瓶颈,因此,这里提供一些解决该问题的建议:
6. 可扩展性对于简单的KV(key/value)缓存(例如Memcached或者Redis的简单应用),扩展很少被认为是一个很严重的问题;因为在大多数情况下,这只需要在在服务器列表中增加或删除节点并修改哈希方法。但是,实际经历过该问题的人就会意识到这是一个非常令人痛苦的问题。对于该话题我们有一些建议:
当进行某些复杂操作时,例如 Redis的 UNION 和 INTERSECT 操作,扩展就成为一个真正的问题。这些操作与SQL中的JOIN命令完全一样。在multi-shard架构下,如果不增加一定的的延迟和复杂性这些操作就完全不能实现。应用级别的分片(Sharding)能够解决一定的问题,因为它允许在分片(shard)模式下运行一些复杂的命令。但这需要非常复杂的设计,并且与内存NoSQL数据库的配置密切相关(例如分片的应用必须明确知道每一个主键保存的节点);当遇到扩展时(例如re-sharding)还需要巨大的代码修改和额外开销。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











인터넷의 발달로 인해 빅데이터 분석과 실시간 정보처리는 기업의 중요한 요구사항이 되었습니다. 이러한 요구 사항을 충족하기 위해 기존 관계형 데이터베이스는 더 이상 비즈니스 및 기술 개발 요구 사항을 충족하지 않습니다. 대신 NoSQL 데이터베이스를 사용하는 것이 중요한 옵션이 되었습니다. 이 기사에서는 NoSQL 데이터베이스와 통합된 SpringBoot를 사용하여 최신 애플리케이션을 개발하고 배포하는 방법에 대해 설명합니다. NoSQL 데이터베이스란 무엇입니까? NoSQL은 SQL이 아닙니다.

최신 웹 애플리케이션 개발에서 PHP와 NoSQL 데이터베이스는 매우 인기 있는 기술이 되었습니다. 과거에는 PHP가 동적 웹 사이트 및 웹 애플리케이션 개발에 널리 사용되었지만 NoSQL 데이터베이스는 최근에 등장한 새로운 데이터 저장 기술로 보다 유연하고 확장 가능한 솔루션을 제공합니다. 이 기사에서는 실제 애플리케이션에서 PHP 및 NoSQL 데이터베이스를 살펴보겠습니다. PHP는 원래 서버측 프로그래밍 언어입니다.

NoSQL(NotOnlySQL) 데이터베이스는 최근 급속히 발전한 데이터베이스 유형으로, 기존 관계형 데이터베이스에 비해 확장성과 성능이 뛰어나며 더 많은 데이터 유형과 데이터 저장 방법을 지원합니다. 그 중 MongoDB는 문서 데이터베이스 모델을 사용하는 NoSQL 데이터베이스로 웹 애플리케이션, 모바일 애플리케이션, 사물 인터넷 장치 및 기타 분야에서 널리 사용됩니다. 이 기사에서는 PHP를 사용하여 MongoDB 데이터베이스의 기본 작업을 작성하는 방법을 소개하고 예제를 통해 이를 충족하는 방법을 보여줍니다.

nosql과 mysql의 차이점은 다음과 같습니다. 1. MySQL은 테이블 설계를 기반으로 하는 관계형 데이터베이스인 반면 NoSQL은 본질적으로 비관계형 문서 기반 설계입니다. 2. MySQL의 엄격한 스키마 제한은 확장이 쉽지 않지만 NoSQL은 확장이 가능합니다. 동적 스키마를 통해 기능을 쉽게 확장할 수 있습니다.

인터넷의 급속한 발전으로 인해 데이터의 양도 늘어나고 있다. 따라서 데이터 관리는 매우 중요한 주제가 되었습니다. NoSQL(비관계형 데이터베이스)은 빅데이터 문제를 처리하는 데 널리 사용되는 솔루션 중 하나가 되었습니다. Redis는 매우 인기 있는 NoSQL 데이터 관리 소프트웨어입니다. 이 기사에서는 Redis와 다른 NoSQL 데이터베이스 간의 유사점과 차이점을 분석하고 비교하여 특성, 장점 및 단점을 이해하는 데 도움을 줍니다. 1. Redis 개요 Redis는 사용자가 다음과 같은 기능을 사용할 수 있는 메모리 기반 스토리지 시스템입니다.

Couchbase는 고성능, 확장성 및 안정성을 제공하는 인기 있는 캐싱 기술이며 많은 기업과 조직이 선택하는 솔루션입니다. 이 기사에서는 Couchbase 캐싱 기술의 원리, 장점 및 적용 시나리오를 자세히 소개합니다. Couchbase Cache의 원리 Couchbase 캐시 기술은 분산 NoSQL 데이터베이스를 기반으로 하며, 이는 여러 노드의 동시 작업을 지원하는 동시에 데이터의 고가용성과 확장성을 달성할 수 있습니다. Couchbase의 데이터는 메모리를 사용하여 캐시됩니다.

인터넷의 발달로 인해 데이터의 양이 증가하고 있으며, 특히 이러한 데이터를 효과적으로 저장하고 처리하는 것이 중요합니다. NoSQL(NotOnlySQL) 데이터베이스는 기존 관계형 데이터베이스에 비해 높은 성능, 확장성 및 편의성으로 인해 많은 주목을 받고 있습니다. 더 유연하고 다양한 데이터 처리 시나리오에 적합합니다. MongoDB는 매우 인기 있는 NoSQL 데이터베이스이며 Java 개발에 자주 사용됩니다. 이 기사에서는 JavaAPI의 개발을 소개합니다.

Java를 사용하여 HBase 기반 NoSQL 데이터베이스 애플리케이션을 개발하는 방법 소개: 빅 데이터 시대의 도래와 함께 NoSQL 데이터베이스는 대용량 데이터를 처리하는 중요한 도구 중 하나가 되었습니다. HBase는 오픈소스 분산형 NoSQL 데이터베이스 시스템으로 빅데이터 분야에서 광범위한 애플리케이션을 보유하고 있습니다. 이 기사에서는 Java를 사용하여 HBase 기반 NoSQL 데이터베이스 애플리케이션을 개발하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. HBase 소개: HBase는 Hadoop 기반의 분산 시스템입니다.
