亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

TiDB 助力客如云餐飲 SaaS 服務(wù)

FrozenMap / 2326人閱讀

摘要:作者客如云公司介紹客如云成立于年,是全球領(lǐng)先國內(nèi)最大的系統(tǒng)公司。目前面向餐飲零售等服務(wù)業(yè)商家,提供軟硬一體的新一代智能化前臺(tái)收銀等云服務(wù),包括預(yù)訂排隊(duì)外賣點(diǎn)餐收銀會(huì)員管理進(jìn)銷存等系統(tǒng)服務(wù),并將數(shù)據(jù)實(shí)時(shí)傳達(dá)云端。

作者:客如云 BigData Infra?Team?
公司介紹

客如云成立于 2012 年,是全球領(lǐng)先、 國內(nèi)最大的 SaaS 系統(tǒng)公司。 目前面向餐飲、 零售等服務(wù)業(yè)商家, 提供軟硬一體的新一代智能化前臺(tái)、收銀等?SaaS 云服務(wù),包括預(yù)訂、排隊(duì)、外賣、點(diǎn)餐、收銀、會(huì)員管理、進(jìn)銷存等系統(tǒng)服務(wù),并將數(shù)據(jù)實(shí)時(shí)傳達(dá)云端。我們是客如云的大數(shù)據(jù)基礎(chǔ)架構(gòu)組,負(fù)責(zé)公司的大數(shù)據(jù)架構(gòu)和建設(shè)工作,為公司提供大數(shù)據(jù)基礎(chǔ)數(shù)據(jù)服務(wù)。

業(yè)務(wù)發(fā)展遇到的痛點(diǎn)

隨著公司業(yè)務(wù)架構(gòu)越來越復(fù)雜,技術(shù)架構(gòu)組需要在服務(wù)器端與應(yīng)用端盡可能的通過微服務(wù)化實(shí)現(xiàn)業(yè)務(wù)解耦,同時(shí)需要第三方熔斷服務(wù)機(jī)制來保證核心業(yè)務(wù)正常運(yùn)行。數(shù)據(jù)庫層面,為了保證高并發(fā)的實(shí)時(shí)寫入、實(shí)時(shí)查詢、實(shí)時(shí)統(tǒng)計(jì)分析,我們針對(duì)地做了很多工作,比如對(duì)實(shí)時(shí)要求較高的服務(wù)走緩存、對(duì)大表進(jìn)行分庫分表操作、對(duì)有冷熱屬性的大表進(jìn)行歸檔、庫分離,雖然用大量人力資源解決了部分問題,但是同時(shí)也帶來了歷史數(shù)據(jù)訪問、跨庫分表操作、多維度查詢等問題。

大數(shù)據(jù)量下,MySQL 稍微復(fù)雜的查詢都會(huì)很慢,線上業(yè)務(wù)也存在單一復(fù)雜接口包含執(zhí)行幾十次?SQL的情況,部分核心交易大庫急需解決訪問性能。

3.?餐飲行業(yè)有明顯的業(yè)務(wù)訪問高峰時(shí)間,高峰期期間數(shù)據(jù)庫會(huì)出現(xiàn)高并發(fā)訪問,而有些業(yè)務(wù),比如收銀,在高峰期出現(xiàn)任何?RDS?抖動(dòng)都會(huì)嚴(yán)重影響業(yè)務(wù)和用戶體驗(yàn)。

傳統(tǒng)的數(shù)倉業(yè)務(wù)往往有復(fù)雜的 T+1 的 ETL 過程,無法實(shí)時(shí)的對(duì)業(yè)務(wù)變化進(jìn)行動(dòng)態(tài)分析和及時(shí)決策。

業(yè)務(wù)描述

大數(shù)據(jù)的 ODS(Operational Data Store) 以前選型的是 MongoDB,ODS 與支持?SaaS?服務(wù)的 RDS 進(jìn)行數(shù)據(jù)同步。初期的設(shè)想是線上的復(fù)雜 SQL、分析 SQL,非核心業(yè)務(wù)?SQL?遷移到大數(shù)據(jù)的?ODS層。同時(shí)?ODS?也作為大數(shù)據(jù)的數(shù)據(jù)源,可以進(jìn)行增量和全量的數(shù)據(jù)處理需求。但是由于使用的MongoDB,對(duì)業(yè)務(wù)有一定侵入,需要業(yè)務(wù)線修改相應(yīng)查詢語句,而這點(diǎn)基本上遭到業(yè)務(wù)線的同學(xué)不同程度的抵制。同時(shí)目前大數(shù)據(jù)使用的是?Hadoop + Hive?存儲(chǔ)和訪問方案,業(yè)務(wù)線需要把歷史明細(xì)查詢遷移到 Hadoop ,然后通過 Impala、Spark SQL、Hive?SQL?進(jìn)行查詢,而這三個(gè)產(chǎn)品在并發(fā)度稍微高的情況下,響應(yīng)時(shí)間都會(huì)很慢,所以大數(shù)據(jù)組在提供明細(xì)查詢上就比較麻煩。?

同時(shí)更為棘手的是,面對(duì)客戶查詢服務(wù)(歷史細(xì)則、報(bào)表等),這類查詢的并發(fā)會(huì)更高,而且客戶對(duì)響應(yīng)時(shí)間也更為敏感,我們首先將處理后的數(shù)據(jù)(歷史細(xì)則等)放在了?MongoDB?上(當(dāng)時(shí)?TiDB 1.0?還沒有?GA ,不然就使用?TiDB?了),然后針對(duì) OLAP 查詢使用了 Kylin ,先解決了明細(xì)查詢的問題。 但是由于業(yè)務(wù)很復(fù)雜, 數(shù)據(jù)變更非常頻繁,一條數(shù)據(jù)最少也會(huì)經(jīng)過五六次變更操作。報(bào)表展現(xiàn)的不僅是當(dāng)天數(shù)據(jù),涉及到掛賬、跨天營(yíng)業(yè)、不結(jié)賬、預(yù)定等復(fù)雜狀況,生產(chǎn)數(shù)據(jù)的生命周期往往會(huì)超過一個(gè)月以上。所以當(dāng)前的?OLAP?解決方案還有痛點(diǎn),所以后續(xù)我們要把 OLAP 查詢移植一部分到 TiDB 上面去,來減輕 Kylin 的壓力并且支持更加靈活的查詢需求,這個(gè)目前還在論證當(dāng)中。?

同時(shí),我們發(fā)現(xiàn) TiDB 有一個(gè)子項(xiàng)目 TiSpark, TiSpark 是建立在 Spark 引擎之上,Spark 在機(jī)器學(xué)習(xí)領(lǐng)域里有諸如?MLlib?等諸多成熟的項(xiàng)目,算法工程師們使用 TiSpark 去操作?TiDB?的門檻非常低,同時(shí)也會(huì)大大提升算法工程師們的效率。我們可以使用 TiSpark 做 ETL,這樣我們就能做到批處理和實(shí)時(shí)數(shù)倉,再結(jié)合 CarbonData 可以做到非常靈活的業(yè)務(wù)分析和數(shù)據(jù)支持,后期根據(jù)情況來決定是否可以把一部分 Hive 的數(shù)據(jù)放在 TiDB 上。

新老框架如下圖:

TiDB 測(cè)試應(yīng)用 1. 配置

阿里云服務(wù)器:

TiDB / PD:3?臺(tái) i1 型 機(jī)器,16c 64g ;

TiKV?:5?臺(tái) i2 型機(jī)器,16c 128g, 1.8T*2 每臺(tái)機(jī)器部署兩個(gè)?KV;

監(jiān)控機(jī)一臺(tái)。

目前我們將線上?RDS?中三個(gè)庫的數(shù)據(jù)通過?Binlog?同步到?TiDB?,高峰期?QPS?23k 左右,接入了業(yè)務(wù)端部分查詢服務(wù);未來我們會(huì)將更多?RDS?庫數(shù)據(jù)同步過來,并交付給更多業(yè)務(wù)組使用。因?yàn)?TiDB 是新上項(xiàng)目,之前的業(yè)務(wù)線也沒有線上 SQL 遷移的經(jīng)歷,所以在寫入性能上也沒有歷史數(shù)據(jù)對(duì)比。

2. 性能對(duì)比

(1)查詢一個(gè)索引后的數(shù)字列,返回?10?條記錄,測(cè)試索引查詢的性能。

(2)查詢兩個(gè)索引后的數(shù)字列,返回?10?條記錄(每條記錄只返回?10?字節(jié)左右的?2?個(gè)小字段)的性能,這個(gè)測(cè)的是返回小數(shù)據(jù)量以及多一個(gè)查詢條件對(duì)性能的影響。

(3)查詢一個(gè)索引后的數(shù)字列,按照另一個(gè)索引的日期字段排序(索引建立的時(shí)候是倒序,排序也是倒序),并且 Skip 100 條記錄后返回?10?條記錄的性能,這個(gè)測(cè)的是 Skip 和 Order 對(duì)性能的影響。

(4)查詢?100?條記錄的性能(沒有排序,沒有條件),這個(gè)測(cè)的是大數(shù)據(jù)量的查詢結(jié)果對(duì)性能的影響。

(5)TiDB?對(duì)比?MySQL?復(fù)雜 SQL 執(zhí)行速率:

Table 1 ?TiDB?數(shù)據(jù)量?5?千萬,MySQL數(shù)據(jù)量?2.5?千萬;

Table 2 ?TiDB?數(shù)據(jù)量?5?千萬,MySQL數(shù)據(jù)量?2.5?千萬;

Table 3 ?TiDB?數(shù)據(jù)量?5?千萬,MySQL數(shù)據(jù)量?2.5?千萬。

a. 對(duì)應(yīng) SQL:

SELECT sum(p.exempt_amount) exempt_amount FROM table1 p JOIN table2 c ONp.relate_id=c.id? AND p.is_paid = 1

andp.shop_identy in(BBBBB)??

andp.brand_identy=AAAAA

andp.is_paid=1 AND p.status_flag=1 AND p.payment_type!=8??????????????

WHEREc.brand_identy = AAAAA

ANDc.shop_identy in(BBBBB)??????????????????????????????

ANDc.trade_type in(1,3,4,2,5)??????????????????????????

ANDc.recycle_status=1????????

AND c.trade_statusIN (4,5,10)????????

ANDp.payment_time BETWEEN "2017-08-11 16:56:19" AND "2018-01-13 00:00:22"????????

ANDc.status_flag = 1????????

ANDc.trade_pay_status in(3,5)????????????????????

AND c.delivery_type in(1,2,3,4,15)

?b. 對(duì)應(yīng) SQL:

SELECT sum(c.sale_amount)tradeAmount,sum(c.privilege_amount)?privilege_amount,sum(c.trade_amount)totalTradeAmount,sum(c.trade_amount_before) tradeAmountBefore????????

FROM (SELECTc.sale_amount,c.privilege_amount,c.trade_amount,c.trade_amount_before????????

FROM table1p????????

JOIN table2c ON p.relate_id=c.id????????????????????????????????

andp.shop_identy in(BBBBB)??????????????????

andp.brand_identy=AAAAA

andp.is_paid=1 AND p.status_flag=1 AND p.payment_type!=8??????????????

and? c.brand_identy = AAAAA

ANDc.shop_identy in(BBBBB)????????????????????????????????

ANDc.trade_type in(1,3,4,2,5)????????????????????????????

ANDc.recycle_status=1???????? AND c.trade_statusIN (4,5,10)????????

ANDp.payment_time BETWEEN "2017-07-31 17:38:55" AND "2018-01-13 00:00:26"????????

ANDc.status_flag = 1????????

ANDc.trade_pay_status in(3,5)??????????????????????

ANDc.delivery_type in(1,2,3,4,15)??????????????????????????????????

ANDp.payment_type not in(4,5,6,8,9,10,11,12)????????

GROUP BY p.relate_id??) c

?c. 對(duì)應(yīng)?SQL:

SELECT SUM(if(pay_mode_id=-5 or pay_mode_id = -6,0,IFNULL(pi.face_amount, 0) - IFNULL(pi.useful_amount, 0) -IFNULL(pi.change_amount, 0))) redundant

FROM table2c

JOIN? table1 p?ON c.id = p.relate_id AND c.brand_identy=p.brand_identy????????

JOIN table3pi ON pi.payment_id=p.id AND pi.pay_status in (3,5,10)

AND? pi.brand_identy=p.brand_identy ANDpi.pay_mode_id!=-23????????????????????????????????

andp.shop_identy in(BBBBB)??????????????????

andp.brand_identy=AAAAA

andp.is_paid=1 AND p.status_flag=1 AND p.payment_type!=8??????????????

WHEREc.brand_identy = AAAAA

ANDc.shop_identy in(BBBBB)??????????????????????????????

ANDc.trade_type in(1,3,4,2,5)??????????????????????????

ANDc.recycle_status=1????????

AND c.trade_statusIN (4,5,10)????????

ANDp.payment_time BETWEEN "2017-07-31 17:38:55" AND "2018-01-13 00:00:26"????????

ANDc.status_flag = 1????????

ANDc.trade_pay_status in(3,5)????????????????????

AND c.delivery_type in(1,2,3,4,15)

d.?對(duì)應(yīng)?SQL:

SELECT? t.id tradeId,sum(t.trade_amount - t.trade_amount_before) AS roundAmount,? sum(-p.exempt_amount) AS exemptAmount

FROM table2t

LEFT JOINtable1 p ON p.relate_id = t.id

LEFT JOINtable3 pi ON pi.payment_id = p.id

WHEREt.brand_identy =AAAAA AND t.trade_status IN (4,5,10)

ANDt.trade_pay_status IN (3,4,5,6,8)? ANDp.payment_type IN (1,2)

ANDpi.pay_mode_id !=-23? ANDp.is_paid=1? AND? t.status_flag=1

AND t.shop_identy IN(<123個(gè)商戶號(hào)碼>)

GROUP BY t.id

e. 對(duì)應(yīng)?SQL:

SELECT? t.id tradeId,??

sum(t.trade_amount- t.trade_amount_before) AS roundAmount,

sum(-p.exempt_amount)AS exemptAmount

FROM table2t

?JOIN table1 p ON t.id = p.relate_id

WHERE? t.brand_identy = AAAA

ANDt.trade_status IN(4,5,10)

ANDt.trade_pay_status IN (3,4,5,6,8)??

ANDp.is_paid=1? AND? t.status_flag=1

group by t.id ;

(6)OLTP 對(duì)比測(cè)試結(jié)果:

(7)簡(jiǎn)單測(cè)試結(jié)論:

不管是索引查詢、分頁查詢、線上業(yè)務(wù)級(jí)的負(fù)載查詢,大數(shù)據(jù)量下 TiDB 的性能都比 MySQL 更強(qiáng);

TiDB 整體性能表現(xiàn)滿足我們業(yè)務(wù)的需求。

生產(chǎn)使用情況

目前線上已經(jīng)存儲(chǔ)超過?6?個(gè)月的數(shù)據(jù),總數(shù)據(jù)量幾 T,支持線上的查詢和分析需求,很多一般復(fù)雜度 OLAP 查詢都能夠在秒級(jí)返回結(jié)果。TiSpark?我們也調(diào)試通過,準(zhǔn)備移植一些支持?OLAP?的?ETL?應(yīng)用做到實(shí)時(shí) ETL。目前?TiDB?生產(chǎn)還有很多優(yōu)化的空間,比如系統(tǒng)參數(shù),SQL?的使用姿勢(shì),索引的設(shè)計(jì)等等。

未來規(guī)劃

已經(jīng)有一個(gè)交易量很大業(yè)務(wù)部門在向我們了解 TiDB,有可能要使用 TiDB 作為線上交易系統(tǒng);

后續(xù)大數(shù)據(jù)也會(huì)使用 TiSpark 來做 OLAP 查詢和數(shù)據(jù)處理,同時(shí)也可能會(huì)作為 Kylin 的數(shù)據(jù)源;

可以預(yù)見將來不管是 OLTP,還是 OLAP 場(chǎng)景,TiDB 都會(huì)在客如云發(fā)揮越來越重要的作用。

致謝

感謝?TiDB?的廠商的人員給予了我們巨大的支持,希望我們能夠提供給?TiDB?一些有意義的信息和建議,在 TiDB 成長(zhǎng)的路上添磚加瓦。

延展閱讀

TiDB 在二維火餐飲管理實(shí)時(shí)報(bào)表中的實(shí)踐

TiDB 在餓了么歸檔環(huán)境的應(yīng)用

TiDB 助力一面數(shù)據(jù)實(shí)現(xiàn)消費(fèi)領(lǐng)域的決策分析平臺(tái)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/17767.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<