主頁 > 資料庫 > 資料庫中間件DBLE學習(二) 學習配置schema.xml

資料庫中間件DBLE學習(二) 學習配置schema.xml

2020-09-20 18:41:36 資料庫

前言

一邊有一個經常引誘我讓我“娛樂至死”的視頻,還有一個不停“鞭策“我讓我快點學習的大BOSS,正是有這兩種極端的愛才讓我常常在自信中明白自己努力的方向,嗯,"人間不值得"!

SCHEMA.XML介紹

上一篇寫了:資料庫中間件DBLE學習(一) 基本介紹和快速搭建,主要介紹快速安裝,在安裝的程序中,我們配置了schema.xml檔案,schema.xml是一個比較重要的檔案,該檔案提供了邏輯庫邏輯表分片規則資料分片物理資料庫等配置,它主要有以下幾個標簽組成,

  • schema標簽,主要是邏輯庫邏輯表的配置,其中邏輯表又有多種型別,比如:全域表、分片表、ER分片表、非分片表等,
  • dataNode標簽,主要定義了資料分片存放的節點,一個dataNode標簽往往就對應著一個資料分片,
  • dataHost標簽,主要定義了物理資料庫及主從讀寫分離的配置,

實戰SCHEMA.XML配置

接下來我們來實戰一下,實戰就拿經典PRODUCT表,ORDERS訂單表來做實驗,前面曾經介紹過邏輯表拆分可以有很多種型別,首先我們先規劃一下,假設我們是一家新的電商公司,在電商平臺上賣自家公司生產的商品,我們的商品總共就5-6種,但擋不住客戶對我們生產的商品的喜愛,款款都是爆款啊,一經發售訂單量就驚人,那么我們怎么來拆分庫表呢?

  • PRODUCTS產品表,就賣幾款爆品,我們要把它做成全域表,也就是每個分片上都有這個PRODUCTS產品表的資料,這樣不會有多大的消耗,畢竟這個表資料量小,也比較方便和分片表進行關聯,
  • ORDERS訂單表,有上千萬的訂單,這個資料量比較大,我們要把ORDERS表做成分片表,PRODUCTS產品表和ORDERS表存在一對多的關系,我們可以按照order_id來進行取模分片,這樣不會有資料過熱的問題,并且產品表是小表在每個分片上都有,我們能非常方便的使用產品表和訂單表進行關聯,

說這么多,不如來張圖給大家看一下,

如圖所示,應用直接連接資料庫中間件,操作邏輯庫testdb,邏輯表PRODUCTS和ORDERS,而上述邏輯庫邏輯表對應存放在物理資料庫主機A和主機B上,MySQL主機A上有分片dn1,MySQL主機B上有分片dn2,dn1上存盤了全域表PRODUCTS和按order_id取模的ORDERS表1,dn2上存盤了全域表PRODUCTS和按order_id取模的ORDERS表2,

整個脈絡理清了,這是我們的配置環境,

服務器 IP地址 描述
DBLE服務器 192.168.56.185 DBLE實體,資料庫中間件,負責接收SQL進行路由分發
MySQL A服務器 192.168.56.181 物理實體A,有db_1資料庫
MySQL B1服務器主 192.168.56.182 物理實體B,有db_2資料庫
MySQL B2服務器從 192.168.56.183 物理實體B的從庫

物理MySQL環境配置

安裝MySQL服務器A和MySQL服務器B的主從環境,然后在這兩套物理資料庫上都創建Buddy用戶,

create user 'buddy'@'%' identified by '123456';
GRANT ALL PRIVILEGES ON *.* TO 'buddy'@'%' IDENTIFIED BY '123456';

配置schema標簽

進入dble的conf檔案夾下配置schema.xml檔案,首先咱們配置schema標簽,主要配置內容如下:

 <schema name="testdb">
        <!--er tables-->
        <table name="orders" primaryKey="order_id" dataNode="dn1,dn2" rule="rule_mod"/>
        <!--global  tables-->
        <table name="products" primaryKey="product_id" type="global" dataNode="dn1,dn2"/>
    </schema>
  • sehama標簽

對邏輯庫的定義,name指定了邏輯庫的名字,

  • table標簽

對表的定義,name指定了表的名字,dataNode指定這張表涉及的資料節點,這里兩張表都指定的是dn1,dn2,rule指定了分片的規則,這里是取模演算法,如果是全域表需要在type屬性列宣告為global,

配置dataNode標簽

<dataNode name="dn1" dataHost="dataHost1" database="db_1"/>
<dataNode name="dn2" dataHost="dataHost2" database="db_2"/>
  • dataNode標簽

name指定的是資料分片節點名稱,dataHost指定對應的資料庫實體,database對在mysql物理實體中的schema,

配置dataHost標簽

<dataHost name="dataHost1" maxCon="1000" minCon="10" balance="0" switchType="-1" slaveThreshold="100">
    <heartbeat>show slave status</heartbeat>
    <!-- can have multi write hosts -->
    <writeHost host="hostM1" url="192.168.56.181:3306" user="buddy" password="buddy">
    </writeHost>
</dataHost>
<dataHost name="dataHost2" maxCon="1000" minCon="10" balance="0" switchType="-1" slaveThreshold="100">
    <heartbeat>show slave status</heartbeat>
    <!-- can have multi write hosts -->
    <writeHost host="hostM2" url="192.168.56.182:3306" user="buddy" password="buddy">
        <readHost host="hostS2" url="192.168.56.183:3306" user="buddy" password="buddy"/>
    </writeHost>
</dataHost>
  • dataHost標簽

指定了資料庫實體,這里name代表資料庫實體的名稱,maxCon定于了最大連接數,minCon定義了空閑時保有的最小連接數,balance是指讀取操作的負載均衡模式,為0則不做均衡,switchType代表了寫操作的高可用切換型別,等于-1則表示不自動切換,slaveThreshold指定了指定主從延遲的閥值,為100,該配置主要與讀資料時的負載均衡有關,它會先取show slave status中的Seconds_Behind_Master值,如果該值大于slaveThreshold,則讀取的時候就會過濾掉這個slave,防止讀到舊的資料,影響前臺的業務,

  • heartbeat標簽

指定心跳檢測,這里心跳檢測的陳述句是show slave status

  • writeHost標簽

指定寫入節點,host是寫節點的名稱,url指定寫入節點的ip和埠號,user指定寫節點資料庫的用戶名,password指定寫節點資料庫的密碼,

  • readHost標簽

指定讀取節點,host是讀節點的名稱,url指定讀取節點的ip和埠號,user指定讀節點資料庫的用戶名,password指定讀節點資料庫的密碼,

啟動dble

上述配置完成之后,我們就可以啟動dble了,

[root@mycat bin]# ./dble start
Starting dble-server...
Removed stale pid file: /dble/dble.pid

啟動后查看wrapper日志居然報錯了,

INFO   | jvm 1    | 2019/12/27 00:34:15 | com.actiontech.dble.config.util.ConfigException: Illegal table conf : table [ orders ] rule function [ func_mod ] partition size : 4 > table datanode size : 2, please make sure table datanode size = function partition size

這里報錯很明顯,主要是這個取模函式默認設定對4取模,大于了我們的dataNode,需要我們在rule.xml中把func_mod函式的partitionCount給改成2.

<function name="func_mod" >
    <property name="partitionCount">2</property>
    <property name="partitionLength">1</property>
</function>

重新啟動dble,能夠成功啟動,

創建分片并驗證

使用管理埠登錄,進行創建datanode的操作,

[root@mysql5 ~]# mysql -uman1 -p -P9066 -h192.168.56.185 -p654321
mysql> create database @@dataNode='dn$1-2';
Query OK, 1 row affected (0.03 sec)

分別登錄MySQL服務器A和MySQL服務器B查看創建分片的情況,可以看到181上創建了db_1,而182上創建了db_2,

[root@mysql5 ~]# mysql -ubuddy -p  -h192.168.56.181 -P3306 -p123456 -e "show databases"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_1               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

[root@mysql5 ~]# mysql -ubuddy -p  -h192.168.56.182 -P3306 -p123456 -e "show databases"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_2               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

創建表并插入資料

使用服務埠登錄,進行創建表和插入資料的操作,此時我們操作的就是邏輯庫和邏輯表,

[root@mysql5 ~]# mysql -uroot -h192.168.56.185 -P8066 -p123456
mysql> show databases;
+----------+
| DATABASE |
+----------+
| testdb   |
+----------+
1 row in set (0.00 sec)

mysql> use testdb;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> create table if not exists products (
    ->   product_id int not null,
    ->   product_name varchar(250),
    ->   expire_time date,
    ->   primary key(product_id)
    -> )engine=innodb charset=utf8;
Query OK, 0 rows affected, 1 warning (0.08 sec)

mysql> create table if not exists orders (
    ->   order_id int not null,
    ->   product_id int not null,
    ->   effective_time date,
    ->   cust_name varchar(20),
    ->   cust_address varchar(200),
    ->   primary key(order_id)
    -> )engine=innodb charset=utf8;
Query OK, 0 rows affected (0.04 sec)

insert into products values(1,'Package A','2015-12-31')
insert into products values(2,'Package B','2022-07-31');
insert into products values(3,'Package C','2025-12-31');
insert into products values(4,'Package D','2028-05-31');

insert into orders values(1,1,'2019-12-25','caocao','gz');
insert into orders values(1,1,'2019-12-25','caocao','gz');
insert into orders values(2,1,'2019-12-25','liubei','sz');
insert into orders values(3,2,'2019-12-25','sunquan','sh');
insert into orders values(4,2,'2019-12-25','zhugeliang','nj');
insert into orders values(5,3,'2019-12-25','simayi','hz');
insert into orders values(6,4,'2019-12-25','caopi','wh');
insert into orders values(7,1,'2019-12-25','guanyu','cd');
insert into orders values(8,1,'2019-12-25','zhengfei','bj');
insert into orders values(9,3,'2019-12-25','zhaoyun','cd');
insert into orders values(10,1,'2019-12-25','weiyan','cq');
insert into orders values(11,4,'2019-12-25','machao','cs');
insert into orders values(12,1,'2019-12-25','lvbu','cd');
insert into orders values(13,1,'2019-12-25','diaochan','sh');
insert into orders values(14,2,'2019-12-25','huangzhong','hz');

mysql> insert into orders values(1,1,'2019-12-25','caocao','gz');
ERROR 1064 (HY000): bad insert sql, sharding column/joinKey:ID not provided,INSERT INTO orders

在插入orders表的時候再次報錯,報錯很明顯,說分片鍵id沒提供,這是因為我們在rule.xml中columns欄位不是指定的分片欄位order_id,在rule.xml配置一下columns欄位為order_id就可以了,

<tableRule name="rule_mod">
    <rule>
        <columns>order_id</columns>
        <algorithm>func_mod</algorithm>
    </rule>
</tableRule>

驗證分片資料否正確

驗證db_1分片上的資料,

[root@mysql5 ~]# mysql -ubuddy  -h192.168.56.181 -P3306 -p123456 -D db_1 -e "select * from products" 
+------------+--------------+-------------+
| product_id | product_name | expire_time |
+------------+--------------+-------------+
|          1 | Package A    | 2015-12-31  |
|          1 | Package B    | 2022-07-31  |
|          1 | Package C    | 2025-12-31  |
|          1 | Package D    | 2028-05-31  |
+------------+--------------+-------------+

[root@mysql5 ~]# mysql -ubuddy  -h192.168.56.181 -P3306 -p123456 -D db_1 -e "select * from orders"  
+----------+------------+----------------+------------+--------------+
| order_id | product_id | effective_time | cust_name  | cust_address |
+----------+------------+----------------+------------+--------------+
|        2 |          1 | 2019-12-25     | liubei     | sz           |
|        4 |          2 | 2019-12-25     | zhugeliang | nj           |
|        6 |          4 | 2019-12-25     | caopi      | wh           |
|        8 |          1 | 2019-12-25     | zhengfei   | bj           |
|       10 |          1 | 2019-12-25     | weiyan     | cq           |
|       12 |          1 | 2019-12-25     | lvbu       | cd           |
|       14 |          2 | 2019-12-25     | huangzhong | hz           |
+----------+------------+----------------+------------+--------------+

驗證db_2分片上的資料,

[root@mysql5 ~]# mysql -ubuddy  -h192.168.56.182 -P3306 -p123456 -D db_2 -e "select * from products"  
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+--------------+-------------+
| product_id | product_name | expire_time |
+------------+--------------+-------------+
|          1 | Package A    | 2015-12-31  |
|          1 | Package B    | 2022-07-31  |
|          1 | Package C    | 2025-12-31  |
|          1 | Package D    | 2028-05-31  |
+------------+--------------+-------------+

[root@mysql5 ~]# mysql -ubuddy  -h192.168.56.182 -P3306 -p123456 -D db_2 -e "select * from orders" 
+----------+------------+----------------+-----------+--------------+
| order_id | product_id | effective_time | cust_name | cust_address |
+----------+------------+----------------+-----------+--------------+
|        1 |          1 | 2019-12-25     | caocao    | gz           |
|        3 |          2 | 2019-12-25     | sunquan   | sh           |
|        5 |          3 | 2019-12-25     | simayi    | hz           |
|        7 |          1 | 2019-12-25     | guanyu    | cd           |
|        9 |          3 | 2019-12-25     | zhaoyun   | cd           |
|       11 |          4 | 2019-12-25     | machao    | cs           |
|       13 |          1 | 2019-12-25     | diaochan  | sh           |
+----------+------------+----------------+-----------+--------------+

總結

這篇我們學習了基本的schema.xml的配置方法,目前還是比較皮毛的,下一篇我們來介紹分片的一些演算法,

參考檔案

  • 1.DBLE Schema.xml 配置決議:https://www.jianshu.com/p/dad60c304202

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/90877.html

標籤:MySQL

上一篇:MySQL在大資料、高并發場景下的SQL陳述句優化和"最佳實踐"

下一篇:MySQL基礎篇(02):從五個維度出發,審視表結構設計

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more