MySQL Cluster实现SQL&NoSQL组合使用

Wesley13
• 阅读 515

在MySQL Cluster集群,应用数据均保存在数据节点。因此不仅MySQL实例可以对其进行访问,通过NDB的API其他应用也可以访问数据。

  利用这个特性,开发者可以实现以下功能:1.进行跨应用的复杂查询2.简单的Key/Value绕过SQL层实现快速读写3.微秒级的实时响应利用以上功能,通过灵活配置应用环境,可提高生产效率和灵活性,在不改动数据库结构的前提下,确保新服务快速投入使用。

  实现SQL&NoSQL:选择正确的接口下面的图表显示了所有可用的数据库访问方法。 MySQL Cluster的原生API是基于NDB的C + +接口 .所有其他接口通过NDB API访问数据。

MySQL Cluster实现SQL&NoSQL组合使用

   在上图的最右侧,一个应用程序已经嵌入了NDB API库,使其能够使用原生的C + +接口中调用数据库,并因此提供尽可能低的延迟。

  在上图的左侧,MySQL提供了一个标准SQL接口的数据节点,并可以连接所有标准的MySQ连接器包括:- 常见的Web开发语言和框架,即PHP,Perl,Python,Ruby, Ruby on Rails, Spring, Django等;- JDBC(也额外链接到ORMs,包括EclipseLink,Hibernate等)

  - .NET- ODBC无论应用程序选择哪种API,最重要的是SQL和NoSQL的数据访问可以同时操作同一数据集,提供给开发人员无限制的灵活度。

  因此,MySQL Cluster可能实时支持以下服务的任意组合:- 使用SQL API的关系查询;- 基于key/Value的Web服务,使用的REST / JSON和memcached的API;- 使用ClusterJ和JPA API的企业应用程序;- 目录服务使用LDAP API;- 使用NDB API实现基于位置的实时Web服务下图总结了每个API的功能和使用场景:

MySQL Cluster实现SQL&NoSQL组合使用

  非模式数据使用memcached API存储作为MySQL Cluster7.2版本里程碑式更新的一部分,Oracle宣布支持memcached的Key/Value API, 允许绕过SQL层直接访问数据库。作为最新的NoSQL API,它广泛用于在世界各地的网络架构中,下面提供了一个更详细的功能介绍。

  和memcached一样,MySQL Cluster在内存中缓存了分布式哈希表。利用这个功能增加对写密集型工作的支持,提供了一个完整的符合ACID关系模型,支持丰富的查询,自动共享,和99.999%的可用性,并具有丰富的管理和监控功能。

  所有的写操作直接作用于MySQL Cluster,消除缓存失效和并通过数据一致性检查,确保数据库和缓存之间的同步。缓存和数据库中的重复数据被淘汰,使数据的简单重复跨多个应用,减少内存占用。

  使用memcached的API,用户可以简化他们的架构,通过压缩缓存和将数据库层归并到MySQL Cluster管理的数据数,使他们能够:- 通过重新使用现有的memcached客户端保留其现有的投资和在memcached,而无需更改应用程序;- 对密集型应用提供更高的写入性能;- 简化向外扩展(无论是在memcached和MySQL Cluster层);- 提高持续运行时间和可用性。

MySQL Cluster实现SQL&NoSQL组合使用

  实现很简单 - 应用程序发送读取和写入到memcached的进程(使用标准memcached的API)。这反过来又调用NDB的Memcached的驱动程序。

  该解决方案已被设计为非常灵活,允许应用架构师找到一个最适合他们配置的需求。它可能被定位在数据节点、应用的Memcached的API,或者在一个专门的memcached层。

  开发人员仍然可以使用memcached服务器的高速缓存, 因此它是可以区别对待不同的数据,例如:- 读写频繁的数据保存在MySQL Cluster中;- 多读少写的数据缓存在memcached并备份在MySQL Cluster中;- 具有较短的生命周期,不需保存在MySQL Cluster的数据将仅存储在memcached.这种方法的好处是,用户可以通过表配置行为上的每一个关键前缀的基础上(在MySQL簇)和应用程序不必关心 - 它只是使用的memcached的API和依赖上软件存储在正确的位置(S)的数据,并保留一切同步。

  默认情况下,每个键/值写入到相同的表每个键/值对存储在单行 从而使模式较少的数据存储。另外,开发人员可以定义一个关键的前缀,使每个价值与预先定义的列在一个特定的表。当然,如果应用程序需要通过SQL来访问相 同的数据,然后开发人员可以映射的键到现有的表列的前缀,使Memcached的访问已经存储在模式结构化数据MySQL簇。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这