0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TableStore实现亿级订单数据库管理

电子设计 2018-10-26 10:12 次阅读

订单系统存在于各行各业,如电商订单、银行流水、运营商话费账单等,是一个非常广泛、通用的系统。对于这类系统,在过去十几年发展中已经形成了经典的做法。但是随着互联网的发展,以及各企业对数据的重视,需要存储和持久化的订单量越来越大。数据的重视程度与数据规模的膨胀带来了新的挑战。

需求场景

某电商平台A,需要进行持久化所有平台产生的订单数据。同时,基于所有的订单数据,系统又需要向外提供面向多种角色:消费者、店家、平台三类人群的多元化的查询服务。消费者可以查询自己的历史订单,商家可以统计热销产品,平台也可以分析用户行为、平台交易规模等。主要查询方式涵盖订单的多维度检索,以及订单数据的分析、统计等,例如:

面向消费者:【A消费者】*【近1年】*【卖出电脑】订单查询;

面向售货员:【B售货员】*【近1个月】销售订单;

。。.。。.

技术点

在订单场景中,技术上通常需要考虑的技术点,主要包含如下几个方面:

查询能力:需要具备丰富的查询类型,如多维度、范围、模糊查询等,同时具备排序、统计等功能;

数据量:存储海量数据的同时,满足强一致、高可用、低成本等要求;

服务性能:应对高并发请求高并发的同时,保证低延迟;

实现多维、实时查询功能,是订单管理解决方案的核心功能,官网控制台地址:项目样例

二、方案演进

应对订单场景,电商通常会采用MySQL传统方案。借助关系型数据库强大的查询能力,用户可直接通过SQL语句实现订单数据的多维度查询、数据统计等。所谓数据膨胀,分为横向、纵向两种,横向即不断迭代引入的新字段维度,纵向即总的存储数据量。在面对这两种订单数据膨胀上,单MySql方案逐渐变得吃力。 SQL + NoSQL的组合方案(以下称:组合方案)便应运而生,借助两个数据库各自的优势分别解决不同场景各自的需求。但组合方案同样也带来了新的问题,组合方案牺牲空间成本,同时也增加了开发工作量与运维复杂度。在保证数据一致性上产生额外开销。

下面让我们看一下如下几个常规方案:

常规方案

1、MySql分库分表方案

MySql自身拥有强大的数据查询、分析功能,基于MyQql创建订单系统,可以应对订单数据多维查询、统计场景。伴随着订单数据量的增加,用户会采取分库、分表方案应对,通过这种伪分布式方案,解决数据膨胀带来的问题。但数据一旦达到瓶颈,便需要重新创建更大规模的分库+数据的全量迁移,麻烦就会不断出现。数据迭代、膨胀带来的困扰,是MySql方案难于逾越的。仅仅依靠MySql的传统订单方案短板凸显。

1、数据纵向(数据规模)膨胀:采用分库分表方案,MySql在部署时需要预估分库规模,数据量一旦达到上限后,重新部署并做数据全量迁移;

2、数据横向(字段维度)膨胀:schema需预定义,迭代新增新字段变更复杂。而维度到达一定量后影响数据库性能;

2、MySql+HBase方案

引入双数据的方案应运而生,通过实时数据、历史数据分存的方案,可以一定程度解决数据量膨胀问题。该方案将数据归类成两部分存储:实时数据、历史数据。同时通过数据同步服务,将过期数据同步至历史数据。

1、实时订单数据(例如:近3个月的订单):将实时订单存入MySql数据库。实时订单的总量膨胀的速度得到了限制,同时保证了实时数据的多维查询、分析能力;

2、历史订单数据(例如:3个月以前的订单):将历史订单数据存入HBase,借助于HBase这一分布式NoSql数据库,有效应对了订单数据膨胀困扰。也保证了历史订单数据的持久化;

但是,该方案牺牲了历史订单数据对用户、商家、平台的使用价值,假设了历史数据的需求频率极低。但是一旦有需求,便需要全表扫描,查询速度慢、IO成本很高。而维护数据同步又带来了数据一致性、同步运维成本飙升等难题;

3、MySql+Elasticsearch方案

组合方案还有MySql+Elasticsearch,该方案同样是将数据分两部分存储,可以一定程度解决订单索引维度增长问题。用户自己维护数据同步服务,保证两部分数据的一致性;

1、全量数据:将全量的订单数据存入MySql数据库,订单ID之外的数据整体存为一个字段。该全量数据作为持久化存储,也用于非索引字段的反查;

2、查询数据:仅将需要检索的字段存入Elasticsearch(基于Lucene分布式索引数据库),借助于Elasticsearch的索引能力,提供可以应付维度膨胀的订单数据,然后必要时反查MySql获取订单完整信息

该方案应付了数据维度膨胀带来的困扰,但是随着订单量的不断膨胀,MySql扩展性差的问题再次暴露出来。同时数据同步至Elasticsearch的方案,开发、运维成本很高,方案选择也存在弊端。

表格存储(TableStore)方案

如果使用表格存储(TableStore)研发的多元索引(SearchIndex)方案,则可以完美地解决亿量级订单系统问题。TableStore具有即开即用,按量收费等特点。多元索引随时创建,是海量电商订单元数据管理的优质方案。

TableStore作为阿里云提供的一款全托管、分布式NoSql型数据存储服务,具有【海量数据存储】、【热点数据自动分片】、【海量数据多维检索】等功能,天然地解决了订单数据大爆炸这一挑战;

同时,SearchIndex功能在保证用户数据高可用的基础上,提供了数据多维度搜索、统计等能力。针对多种场景创建多种索引,实现多种模式的检索。用户可以仅在需要的时候创建、开通索引。由TableStore来保证数据同步的一致性,这极大的降低了用户的方案设计、服务运维、代码开发等工作量。

基于表格存储搭建的订单系统页面一览

样例内嵌在表格存储控制台中,用户可登录控制台体验系统(若为表格存储的新用户,需要点击开通服务后体验,开通免费,订单数据存储在公共实例中,体验不消耗用户存储、流量、Cu)。

注:该样例提供了【亿量级】订单数据。官网控制台地址:项目样例

二、搭建准备

若您对于亿量级订单系统的体验不错,希望开始自己系统的搭建之旅,只需按照如下步骤便可以着手搭建了:

1、开通表格存储

通过控制台开通表格存储服务,表格存储即开即用(后付费),采用按量付费方式,已为用户提供足够功能测试的免费额度。表格存储官网控制台、免费额度说明。

2、创建实例

通过控制台创建表格存储实例,选择支持多元索引的Region。(当前阶段SearchIndex功能尚未商业化,暂时开放北京、上海、深圳、杭州四地,后续逐渐开放)

创建实例后,提交工单申请多元索引功能邀测(商业化后默认打开,不使用不收费)。

邀测地址:提工单,选择【表格存储】》【产品功能、特性咨询】》【创建工单】,申请内容如下:

问题描述:请填写【申请SearchIndex邀测】

机密信息:请填写【地域+实例名】,例:上海+myInstanceName

3、SDK下载

使用具有多元索引(SearchIndex)的SDK,官网地址,暂时java、go、node.js三种SDK增加了新功能

java-SDK

go-SDK

$ go get github.com/aliyun/aliyun-tablestore-go-sdk

4、表设计

订单系统不仅仅是订单一张数据表,它应包含:消费者表、售货员表、产品表、供货商表、交易订单表、支付订单表等。在本样例中,猪腰使用最基本的四张表(消费者表、售货员表、产品表、交易订单表),仅以订单表举例如下:

表名:order_contract

三、开始搭建(核心代码)

1、创建数据表

四张表:订单表、消费者表、售货员表、产品表

用户仅需维护一个实例,按如下方式创建:通过控制台创建、管理数据表(用户也可以通过SDK直接创建):

2、创建数据表索引

TableStore自动做全量、增量的索引数据同步:用户可以通过控制台创建、管理SearchIndex(用户也可通过SDK创建):

3、数据导入

插入部分测试数据(控制台样例中插入了1亿条数据,用户自己可以通过控制台插入少量测试数据);

4、数据读取

数据读取分为两类:

主键读取

基于原生表格存储的主键列获取:getRow, getRange, batchGetRow等。主键读取用于索引(自动)反查,用户也可以提供主键(订单md5)的单条查询的页面,亿量级下查询速度极快。单主键查询方式不支持多维度检索;

索引读取

基于新SearchIndex功能Query:search接口。用户可以自由设计索引字段的多维度条件组合查询。通过设置选择不同的查询参数,构建不同的查询条件、不同排序方式;目前支持:精确查询、范围查询、前缀查询、匹配查询、通配符查询、短语匹配查询、分词字符串查询,并通过布尔与、或组合。

如【c0001号消费者,且消费在99.99以上的订单】组合方式如下:

作者:云栖社区 wangtantan

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6513

    浏览量

    87609
  • MySQL
    +关注

    关注

    1

    文章

    775

    浏览量

    26006
收藏 人收藏

    评论

    相关推荐

    labvies访问数据库

    方式都无法正确反映各类数据之间的密切联系,都不能有效的管理和组织数据。因此以数据库为中心,以数据管理为重点,构建的基于
    发表于 08-26 10:19

    在LABVIEW中实现数据库表格的操作

    利用LabVIEW数据库工具包只能操作而不能创建数据库,所以必须借助第三方数据库管理系统,比如Access,来创建数据库。本文试图通过LAB
    发表于 06-29 21:08

    信息管理 Labview数据库的基本操作

    本帖最后由 轻度红尘 于 2016-10-17 22:53 编辑 此程序是基于数据库操作的人员信息管理数据库操作有兴趣的朋友可以看看 同时希望坛友可以提出优化意见谢谢了(如果不能运行 可以在GET date base
    发表于 10-17 22:27

    数据库管理

    如题:用labview操作access数据库做公司测试流程管控。因测试数据量大,数据生成多,现在accdb文件已经有50M了,现在发现数据库在本地操作都很快,但是放在远端服务器后操作就
    发表于 11-08 16:58

    MaxCompute访问TableStore(OTS) 数据

    数据。 之前我们介绍了怎样在MaxCompute上处理存储在OSS上面的非结构化数据,在这里我们将进一步介绍如何将来自TableStore(OTS)的数据纳入MaxCompute上的计
    发表于 04-02 11:10

    QuickBI助你成为分析师-保证数据安全:行权限

    yuansub1/yuansub2,结果如下,只能查看 东北、华北、华东区域订单数据:登录账号yuansub3/yuansub5,结果如下,只能查看 华南、华中、西北和西南区域 订单数据:以上便实现了 针对
    发表于 04-26 16:40

    安全数据库如何管理

    据我所知,关于BlueNrg-MS设备上绑定的编程手册部分,加密密钥存储在安全数据库中,以便解析地址并加密未来的数据连接。这一切似乎都按预期工作,但我不清楚如何管理安全数据库随着时间的
    发表于 03-04 16:41

    关系型数据库与非关系数据库的区别浅析

    关系型数据库的一个劣势就是 阻抗失谐(impedance mismatch):关系模型和内存中的数据结构之间存在差异关系型数据库中不可以含有嵌套纪录,一个订单里面可能是多个
    发表于 06-03 06:03

    数据库管理系统有什么功能?

    根据处理对象的不同,数据库管理系统的层次结构由高级到低级依次为应用层、语言翻译处理层、数据存取层、数据存储层、操作系统。
    发表于 04-02 09:00

    labview软件连接云数据库实现文件管理,版本更新,物联网搭建~~~

    阿里云数据库管理APP开发,可实现文件的上传与下载。2021年2月1日后,试用的云数据库到期,到时将不能使用。有兴趣的欢迎下面评论。
    发表于 12-28 09:44

    用BI系统做亿级数据分析,效率会变慢吗?

    影响的报表格式要求,一键即可生成。同时,奥威BI的分布式计算,还能以低成本获得大数据高性能计算能力。即使涉及亿级数据的运算分析,也能够保持秒的运算分析效率。多技术共同发力,
    发表于 02-07 13:52

    iPhone XR销售不如预期 苹果开始削减订单数

    11月12日,援引两位知情人士的话称,价格稍低的iPhone XR销售不如预期,苹果已经向两家中国组件商发出通知,削减订单数量。
    发表于 11-21 15:30 614次阅读

    华为5G订单数量被爱立信反超

    2020年对于华为而言,可谓是诸事不顺的一年,美国不断加大制裁力度,致使华为手机业务、通信业务都受到了一定程度的影响。华为手机市场份额正在快速萎缩,5G订单更是长时间陷入停滞更新的状态,这也导致华为5G订单数量被其他厂商轻松反超。
    发表于 12-31 10:16 669次阅读

    华为将缩减今年智能手机订单数

    多家供应商透露,华为已通知将缩减今年智能型手机订单数量,预计订单降幅达到60%。
    的头像 发表于 02-22 11:05 1544次阅读

    特斯拉开启“全球降价”后特斯拉订单数环比涨500%

    特斯拉开启“全球降价”后特斯拉订单数环比涨500% 现在特斯拉把价格战推向全球;特斯拉开启“全球降价”后特斯拉订单数环比涨500%。看来大家还是很诚实,特斯拉开启“全球降价”就很多人诚实的下单
    的头像 发表于 01-17 16:54 9689次阅读
    特斯拉开启“全球降价”后特斯拉<b class='flag-5'>订单数</b>环比涨500%