2020-11-07

AI时代下的Redis
NoSQL数据库系统如此迅猛增长的部分原因在于它们与人工智能(AI)和机器学习(ML)等所谓的“大数据”兼容。杭州由于代还NoSQL数据库的结构性不如信用卡关系数据库,所以它们更灵活,可以更好地扩展——对于需要由AI和ML系统常常实时处理的大量数据而言这是两个重要的属性。
在这里插入图片描述

作者:布加迪编译来源:51CTO|2020-06-04 07:00 收藏 分享
AI时代下的Redis

【51CTO.com快译】

关系数据库仍然是世界上使用最广泛的数据库类别,但多年来其人气趋势线一直平平。同时,其他云原生数据库系统类型却日益崛起。这在各种版本的NoSQL数据库系统中尤为明显,比如文档存储数据库(MongoDB)、键值数据库(Redis)和宽列数据库(Cassandra)。

来自DB-Engines的下图清楚地表明了这个趋势:

NoSQL数据库系统如此迅猛增长的部分原因在于它们与人工智能(AI)和机器学习(ML)等所谓的“大数据”兼容。由于NoSQL数据库的结构性不如关系数据库,所以它们更灵活,可以更好地扩展——对于需要由AI和ML系统常常实时处理的大量数据而言这是两个重要的属性。

为了更好地了解为什么NoSQL现在如此流行、这些系统如何处理AI和ML,我与最流行的NoSQL数据库公司之一Redis Labs的创始人进行了交谈。Yiftach Shoolman自2011年以来一直担任该公司的CTO,最近带领手下发布了Redis Labs的新模块RedisAI。

Shoolman告诉我:“我认为,今天人们以更开放的心态看待新的数据模型。”他说,企业关注关系数据库的替代技术主要出于两个动机。第一个是可扩展性,第二个是关系数据库不直接支持应用程序所需的数据模型时。后者的一个例子是电子商务网站上的实时推荐,这需要能够将大量不同数据快速连接在一起的数据库(这方面的一个选择是Graph DBMS产品,比如Neo4j)。

Redis是一种键值数据库系统,这意味着它存储键值对,但与Neo4j一样,它也针对实时Web进行了优化。实际上,它是为实时Web发明的。Salvatore Sanfilippo早在2009年开始开发Redis时,那是由于他当时在开发一个实时分析引擎,但是借助关系数据库很难扩展。于是,他做了任何聪明的开发人员都会做的事情:自行构建解决方案。这就变成了开源Redis,现在它是全球人气指数排名第八的数据库(键值数据库中人气最高)。

Redis有内存数据结构,这意味着它使用随机存取存储器(RAM)存储数据。这使其比传统数据库快得多,还非常适合用作缓存系统。这就是Redis有别于关系数据库及NoSQL竞争对手(比如MongoDB和Cassandra)的地方。据Shoolman声称,由于内存结构,Redis“对实时应用进行了非常优化的设计,延迟时间不到1毫秒。”

内存结构的缺点之一是,它根本没有与其他数据库系统同样的容量,对于AI而言更是如此。鉴于AI可处理你馈送给它的大量数据,这可能是个大问题。查询数据也不是一样容易,查询数据是Oracle和MySQL等关系数据库以及CockroachDB等新兴的云原生SQL数据库的优势。

虽然Shoolman承认Redis“在许多情况下仍被用作缓存系统”,但他说Redis Labs公司的目标是帮助企业“将其更多地用作缓存”。该公司主要通过Redis Enterprise来做到这一点,这是基于开源Redis数据库而建的商业平台。

Redis Labs通过模块将Redis的核心功能扩展为一个完整的“数据库平台”,RedisAI是其中一种模块。RedisAI是Redis Labs与AI软件专家Tenserwerk共同开发的,让您能够跨Redis数据库运行AI推理引擎。

Shoolman透露的一个关键点是,RedisAI模块不会训练您的数据——为此您需要TensorFlow或PyTorch之类的工具(这是两个用于机器学习的开源平台)。RedisAI出现在应用程序层,是时候将逻辑运用于数据(推理)、然后将数据提供给用户了。

Shoolman解释说:“我们认为您需要在云端某个地方训练[AI]模型。一旦您要进行服务或推理,Redis是适合执行该操作的数据库。”

Shoolman以信用卡交易的交易评分为例。最终,系统必须决定交易是成功还是失败。 Shoolman说:“为了做到这一点,您需要添加用户资料、商家资料、教育资料和有效的交易数据本身,然后对所有内容进行向量化处理,并发送给AI。”

RedisAI是AI软件和数据之间的一种渠道。而速度最关键,至少对Redis而言是如此。 当然,准确性部分也很关键,但这大概是AI训练平台的责任。

据Shoolman声称,企业前进道路上的主要挑战之一是它们是想坚持使用关系数据库的传统孤立方法,还是想采用依托一个后端支持多个数据模型的多模型方法。Redis Enterprise是后者的一个例子,它的每个模块都支持不同的数据模型。

Shoolman说,这取决于您想要实现的目标。与多模型方法相比,有些事情是关系数据库根本做不到的。

Shoolman说:“如果你考虑需要合并多个数据模型的事务,并仍从事毫秒级延迟的操作,根本无法用孤立方法来做到。”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CockroachDB (蟑螂数据库)是一个可伸缩的、支持地理位置处理、支持事务处理的数据存储系统,和谷歌的F1系统类似,支持分布式事务等特性。。CockroachDB 提供两种不同的的事务特性,包括快照隔离(snapshot isolation,简称SI)和顺序的快照隔离(SSI)语义,后者是默认的隔离级别。        为了保证在线的百万兆字节流量业务的质量,Google开发了Spanner系统,这是一个可扩展的,稳定的,支持事务的系统。许多参与开发CockroachDB的团队现在都服务于开源社区。就像真正的蟑螂(cockroach)一样,CockroachDB可以在没有数据头、任意节点失效的情况下正常运行。这个开源项目有很多富有经验的贡献者,创始人们通过社交媒体、Github、网络、会议和聚会结识他们并鼓励他们参与其中    蟑螂是一个分布式的K/V数据仓库,支持ACID事务,多版本值存储是其首要特性。主要的设计目标是全球一致性和可靠性,从蟑螂的命名上是就能看出这点。蟑螂数据库能处理磁盘、物理机器、机架甚至数据中心失效情况下最小延迟的服务中断;整个失效过程无需人工干预。蟑螂的节点是均衡的,其设计目标是同质部署(只有一个二进制包)且最小配置。    蟑螂数据库实现了单一的、巨大的有序映射,键和值都是字节串形式(不是unicode),支持线性扩展,理论上支持4EB的逻辑数据)。映射有一个或者多个Range组成,每一个Range对应一个把数据存储在RocksDB(LevelDB的一个变种,Facebook贡献)上的K/V数据库,并且复制到三个或者更多蟑螂服务器上,Range定义为有开始和结束键值的区间。Range可以合并及分裂来维持总大小在一个全局配置的最大最小范围之间。Range的大小默认是64M,目的是便于快速分裂和合并,在一个热点键值区间快速分配负载。Range的复制确定为分离的数据中心来达到可靠性(比如如下分组:{ US-East, US-West, Japan }, { Ireland, US-East, US-West}, { Ireland, US-East, US-West, Japan, Australia })    Range有一种变化,通过分布式一致性算法实例来调节确保一致性,蟑螂所选择使用Raft一致性算法。所有的一致性状态存在于RocksDB中。项目官网地址:http://www.cockroachdb.cn/ 标签:蟑螂数据库  国人开源
可以使用 Java 中的 LocalDateTime 类来处理时间。 首先,我们需要将给定的时间段转换为 LocalDateTime 对象: ```java LocalDateTime start = LocalDateTime.of(2020, 11, 20, 0, 0, 0); LocalDateTime end = LocalDateTime.of(2021, 10, 9, 23, 59, 59); ``` 这里将结束时间设置为 23:59:59 是因为我们想要包含该日期的所有时间。 接下来,我们可以使用一个循环来遍历时间段中的每一天,并获取该天的开始时间和结束时间: ```java LocalDateTime current = start; while (!current.isAfter(end)) { LocalDateTime dayStart = current.withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime dayEnd = current.withHour(23).withMinute(59).withSecond(59).withNano(999999999); System.out.println("Day " + current.toLocalDate() + " starts at " + dayStart + " and ends at " + dayEnd); current = current.plusDays(1); } ``` 这里,我们使用 `withHour`、`withMinute`、`withSecond` 和 `withNano` 方法来设置每天的开始时间和结束时间。然后,我们可以使用 `plusDays` 方法来增加 `current` 对象的日期,以便遍历整个时间段。 完整代码如下: ```java import java.time.LocalDateTime; public class Main { public static void main(String[] args) { LocalDateTime start = LocalDateTime.of(2020, 11, 20, 0, 0, 0); LocalDateTime end = LocalDateTime.of(2021, 10, 9, 23, 59, 59); LocalDateTime current = start; while (!current.isAfter(end)) { LocalDateTime dayStart = current.withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime dayEnd = current.withHour(23).withMinute(59).withSecond(59).withNano(999999999); System.out.println("Day " + current.toLocalDate() + " starts at " + dayStart + " and ends at " + dayEnd); current = current.plusDays(1); } } } ``` 输出结果如下: ``` Day 2020-11-20 starts at 2020-11-20T00:00 and ends at 2020-11-20T23:59:59.999999999 Day 2020-11-21 starts at 2020-11-21T00:00 and ends at 2020-11-21T23:59:59.999999999 Day 2020-11-22 starts at 2020-11-22T00:00 and ends at 2020-11-22T23:59:59.999999999 ... Day 2021-10-07 starts at 2021-10-07T00:00 and ends at 2021-10-07T23:59:59.999999999 Day 2021-10-08 starts at 2021-10-08T00:00 and ends at 2021-10-08T23:59:59.999999999 Day 2021-10-09 starts at 2021-10-09T00:00 and ends at 2021-10-09T23:59:59.999999999 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值