主頁 > 資料庫 > MySQL之存盤引擎、基本資料型別及約束條件

MySQL之存盤引擎、基本資料型別及約束條件

2022-02-19 08:03:53 資料庫

一、存盤引擎

資料庫存盤引擎是資料庫底層軟體組織,資料庫管理系統(DBMS)使用資料引擎進行創建、查詢、更新和洗掉資料,不同的存盤引擎提供不同的存盤機制、索引技巧、鎖定水平等功能,使用不同的存盤引擎,還可以獲得特定的功能,現在許多不同的資料庫管理系統都支持多種不同的資料引擎,

因為在關系資料庫中資料的存盤是以表的形式存盤的,所以存盤引擎也可以稱為表型別(Table Type,即存盤和操作此表的型別),

1.1 MySQL存盤引擎

MySQL給開發者提供了查詢存盤引擎的功能,執行以下sql即可查詢到mysql中的存盤引擎:

show engines;

我的MySQL版本是5.6.50,下面是執行結果:

image

  • InnoDB存盤引擎

    InnoDB是事務型資料庫的首選引擎,通過上圖也看到了,InnoDB是目前MYSQL的默認事務型引擎,是目前最重要、使用最廣泛的存盤引擎,支持事務安全表(ACID),支持行鎖定和外鍵,InnoDB主要特性有:

    1、InnoDB給MySQL提供了具有提交、回滾和崩潰恢復能力的事物安全(ACID兼容)存盤引擎,InnoDB鎖定在行級并且也在SELECT陳述句中提供一個類似Oracle的非鎖定讀,這些功能增加了多用戶部署和性能,在SQL查詢中,可以自由地將InnoDB型別的表和其他MySQL的表型別混合起來,甚至在同一個查詢中也可以混合,

    2、InnoDB是為處理巨大資料量的最大性能設計,它的CPU效率可能是任何其他基于磁盤的關系型資料庫引擎鎖不能匹敵的,

    3、InnoDB存盤引擎完全與MySQL服務器整合,InnoDB存盤引擎為在主記憶體中快取資料和索引而維持它自己的緩沖池,InnoDB將它的表和索引在一個邏輯表空間中,表空間可以包含數個檔案(或原始磁盤檔案),這與MyISAM表不同,比如在MyISAM表中每個表被存放在分離的檔案中,InnoDB表可以是任何尺寸,即使在檔案尺寸被限制為2GB的作業系統上

    4、InnoDB支持外鍵完整性約束,存盤表中的資料時,每張表的存盤都按主鍵順序存放,如果沒有在表定義時指定主鍵,InnoDB會為每一行生成一個6位元組的ROWID,并以此作為主鍵,

    5、InnoDB被用在眾多需要高性能的大型資料庫站點上,

    InnoDB不創建目錄,使用InnoDB時,MySQL將在MySQL資料目錄下創建一個名為ibdata1的10MB大小的自動擴展資料檔案,以及兩個名為ib_logfile0和ib_logfile1的5MB大小的日志檔案,

    場景:由于其支持事務處理,支持外鍵,支持崩潰修復能力和并發控制,如果需要對事務的完整性要求比較高(比如銀行),要求實作并發控制(比如售票),那選擇InnoDB有很大的優勢,如果需要頻繁的更新、洗掉操作的資料庫,也可以選擇InnoDB,因為支持事務的提交(commit)和回滾(rollback),

  • MyISAM存盤引擎

    MyISAM基于ISAM存盤引擎,并對其進行擴展,它是在Web、資料倉儲和其他應用環境下最常使用的存盤引擎之一,MyISAM擁有較高的插入、查詢速度,但不支持事物和外鍵,

    MyISAM主要特性有:

    1、大檔案(達到63位檔案長度)在支持大檔案的檔案系統和作業系統上被支持,

    2、當把洗掉和更新及插入操作混合使用的時候,動態尺寸的行產生更少碎片,這要通過合并相鄰被洗掉的塊,以及若下一個塊被洗掉,就擴展到下一塊自動完成,

    3、每個MyISAM表最大索引數是64,這可以通過重新編譯來改變,每個索引最大的列數是16,

    4、最大的鍵長度是1000位元組,這也可以通過編譯來改變,對于鍵長度超過250位元組的情況,一個超過1024位元組的鍵將被用上,

    5、BLOB和TEXT列可以被索引,支持FULLTEXT型別的索引,而InnoDB不支持這種型別的索引,

    6、NULL被允許在索引的列中,這個值占每個鍵的0~1個位元組,

    7、所有數字鍵值以高位元組優先被存盤以允許一個更高的索引壓縮,

    8、每個MyISAM型別的表都有一個AUTO_INCREMENT的內部列,當INSERT和UPDATE操作的時候該列被更新,同時AUTO_INCREMENT列將被重繪,所以說,MyISAM型別表的AUTO_INCREMENT列更新比InnoDB型別的AUTO_INCREMENT更快,

    9、可以把資料檔案和索引檔案放在不同目錄,

    10、每個字符列可以有不同的字符集,

    11、有VARCHAR的表可以固定或動態記錄長度,

    12、VARCHAR和CHAR列可以多達64KB,

    存盤格式:

    1、靜態表(默認):欄位都是非變長的(每個記錄都是固定長度的),存盤非常迅速、容易快取,出現故障容易恢復;占用空間通常比動態表多,

    2、動態表:占用的空間相對較少,但是頻繁的更新洗掉記錄會產生碎片,需要定期執行optimize table或myisamchk -r命令來改善性能,而且出現故障的時候恢復比較困難,

    3、壓縮表:使用myisampack工具創建,占用非常小的磁盤空間,因為每個記錄是被單獨壓縮的,所以只有非常小的訪問開支,

    靜態表的資料在存盤的時候會按照列的寬度定義補足空格,在回傳資料給應用之前去掉這些空格,如果需要保存的內容后面本來就有空格,在回傳結果的時候也會被去掉,(其實是資料型別char的行為,動態表中若有這個資料型別也同樣會有這個問題)

    使用MyISAM引擎創建資料庫,將產生3個檔案,檔案的名字以表名字開始,擴展名之處檔案型別:frm檔案存盤表定義、資料檔案的擴展名為.MYD(MYData)、索引檔案的擴展名時.MYI(MYIndex),

    場景:如果表主要是用于插入新記錄和讀出記錄,那么選擇MyISAM能實作處理高效率,

  • MEMORY存盤引擎

    MEMORY存盤引擎將表中的資料存盤到記憶體中,為查詢和參考其他表資料提供快速訪問,MEMORY主要特性有:

    1、MEMORY表的每個表可以有多達32個索引,每個索引16列,以及500位元組的最大鍵長度,

    2、MEMORY存盤引擎執行HASH和BTREE縮影,

    3、可以在一個MEMORY表中有非唯一鍵值,

    4、MEMORY表使用一個固定的記錄長度格式,

    5、MEMORY不支持BLOB或TEXT列,

    6、MEMORY支持AUTO_INCREMENT列和對可包含NULL值的列的索引,

    7、MEMORY表在所由客戶端之間共享(就像其他任何非TEMPORARY表),

    8、MEMORY表記憶體被存盤在記憶體中,記憶體是MEMORY表和服務器在查詢處理時的空閑中,創建的內部表共享,

    9、當不再需要MEMORY表的內容時,要釋放被MEMORY表使用的記憶體,應該執行DELETE FROM或TRUNCATE TABLE,或者洗掉整個表(使用DROP TABLE),

    MEMORY存盤引擎默認使用哈希(HASH)索引,其速度比使用B-+Tree型要快,但也可以使用B樹型索引,由于這種存盤引擎所存盤的資料保存在記憶體中,所以其保存的資料具有不穩定性,比如如果mysqld行程發生例外、重啟或計算機關機等等都會造成這些資料的消失,所以這種存盤引擎中的表的生命周期很短,一般只使用一次,現在mongodb、redis等NOSQL資料庫愈發流行,MEMORY存盤引擎的使用場景越來越少,

    場景:如果需要該資料庫中一個用于查詢的臨時表,

  • BLACKHOLE存盤引擎(黑洞引擎)

    該存盤引擎支持事務,而且支持mvcc的行級鎖,寫入這種引擎表中的任何資料都會消失,主要用于做日志記錄或同步歸檔的中繼存盤,這個存盤引擎除非有特別目的,否則不適合使用,

    場景:如果配置一主多從的話,多個從服務器會在主服務器上分別開啟自己相對應的執行緒,執行 binlogdump 命令而且多個此類行程并不是共享的,為了避免因多個從服務器同時請求同樣的事件而導致主機資源耗盡,可以單獨建立一個偽的從服務器或者叫分發服務器,

  • MERGE存盤引擎

    MERGE存盤引擎是一組MyISAM表的組合,這些MyISAM表結構必須完全相同,盡管其使用不如其它引擎突出,但是在某些情況下非常有用,說白了,Merge表就是幾個相同MyISAM表的聚合器;Merge表中并沒有資料,對Merge型別的表可以進行查詢、更新、洗掉操作,這些操作實際上是對內部的MyISAM表進行操作,

    場景:對于服務器日志這種資訊,一般常用的存盤策略是將資料分成很多表,每個名稱與特定的時間端相關,例如:可以用12個相同的表來存盤服務器日志資料,每個表用對應各個月份的名字來命名,當有必要基于所有12個日志表的資料來生成報表,這意味著需要撰寫并更新多表查詢,以反映這些表中的資訊,與其撰寫這些可能出現錯誤的查詢,不如將這些表合并起來使用一條查詢,之后再洗掉Merge表,而不影響原來的資料,洗掉Merge表只是洗掉Merge表的定義,對內部的表沒有任何影響,

  • ARCHIVE存盤引擎

    Archive是歸檔的意思,在歸檔之后很多的高級功能就不再支持了,僅僅支持最基本的插入和查詢兩種功能,在MySQL 5.5版以前,Archive是不支持索引,但是在MySQL 5.5以后的版本中就開始支持索引了,Archive擁有很好的壓碩訓制,它使用zlib壓縮庫,在記錄被請求時會實時壓縮,所以它經常被用來當做倉庫使用,

    場景:由于高壓縮和快速插入的特點Archive非常適合作為日志表的存盤引擎,但是前提是不經常對該表進行查詢操作,

  • CSV存盤引擎

    使用該引擎的MySQL資料庫表會在MySQL安裝目錄data檔案夾中的和該表所在資料庫名相同的目錄中生成一個.CSV檔案(所以,它可以將CSV型別的檔案當做表進行處理),這種檔案是一種普通文本檔案,每個資料行占用一個文本行,該種型別的存盤引擎不支持索引,即使用該種型別的表沒有主鍵列;另外也不允許表中的欄位為null,csv的編碼轉換需要格外注意,

    場景:這種引擎支持從資料庫中拷入/拷出CSV檔案,如果從電子表格軟體輸出一個CSV檔案,將其存放在MySQL服務器的資料目錄中,服務器就能夠馬上讀取相關的CSV檔案,同樣,如果寫資料庫到一個CSV表,外部程式也可以立刻讀取它,在實作某種型別的日志記錄時,CSV表作為一種資料交換格式,特別有用,

  • PERFORMANCE_SCHEMA存盤引擎

    該引擎主要用于收集資料庫服務器性能引數,這種引擎提供以下功能:提供行程等待的詳細資訊,包括鎖、互斥變數、檔案資訊;保存歷史的事件匯總資訊,為提供MySQL服務器性能做出詳細的判斷;對于新增和洗掉監控事件點都非常容易,并可以隨意改變mysql服務器的監控周期,例如(CYCLE、MICROSECOND), MySQL用戶是不能創建存盤引擎為PERFORMANCE_SCHEMA的表,

    場景: DBA能夠較明細得了解性能降低可能是由于哪些瓶頸,

  • Federated存盤引擎

    該存盤引擎可以不同的Mysql服務器聯合起來,邏輯上組成一個完整的資料庫,這種存盤引擎非常適合資料庫分布式應用,

    Federated存盤引擎可以使你在本地資料庫中訪問遠程資料庫中的資料,針對federated存盤引擎表的查詢會被發送到遠程資料庫的表上執行,本地是不存盤任何資料的,

    缺點:

    1. 對本地虛擬表的結構修改,并不會修改遠程表的結構

    2. truncate 命令,會清除遠程表資料

    3. drop命令只會洗掉虛擬表,并不會洗掉遠程表

    4. 不支持 alter table 命令

    5. select count(*), select * from limit M, N 等陳述句執行效率非常低,資料量較大時存在很嚴重的問題,但是按主鍵或索引列查詢,則很快,如以下查詢就非常慢(假設 id 為主索引)

      select id from db.tablea where id >100 limit 10 ;
      

      而以下查詢就很快:

      select id from db.tablea where id >100 and id<150;
      
    6. 如果虛擬虛擬表中欄位未建立索引,而物體表中為此欄位建立了索引,此種情況下,性能也相當差,但是當給虛擬表建立索引后,性能恢復正常,

    7. 類似 where name like "str%" limit 1 的查詢,即使在 name 列上創建了索引,也會導致查詢過慢,是因為federated引擎會將所有滿足條件的記錄讀取到本地,再進行 limit 處理,

    場景: dblink,

1.2 存盤引擎的選擇

功能 MYISAM Memory InnoDB Archive
存盤限制 256TB RAM 64TB None
支持事務 No No Yes No
支持全文索引 Yes No No No
支持數索引 Yes Yes Yes No
支持哈希索引 No Yes No No
支持資料快取 No N/A Yes No
支持外鍵 No No Yes No

二、MySQL基本資料型別

image

2.1 整形

不同的int型別能夠存盤的數字范圍是不一樣的,

  1. 要注意是否存負數(正負號需要占一個位元位)

  2. 針對手機號碼只能用bigint

'''研究默認是否需要正負號'''
	create table t5(id tinyint);
	insert into t5 values(-999),(999);
'''結論:所有的int型別默認都需要正負號'''
	create table t6(id tinyint unsigned);  # 移除正負號
	insert into t6 values(-999),(999);

2.2 浮點型

float(255,30)  """總共255位 小數位占30位"""
double(255,30)  """總共255位 小數位占30位"""
decimal(65,30)  """總共65位 小數位占30位"""

"""研究三者的不同"""
create table tb7(id float(255,30));
create table tb8(id double(255,30));
create table tb9(id decimal(65,30));
insert into tb7 values(1.11111111111111111111111);
insert into tb8 values(1.11111111111111111111111);
insert into tb9 values(1.11111111111111111111111);

image

"""結論:三者的精確度不一樣"""
float < double < decimal

一般情況下小數點后面只保留兩位 所以float足矣;如果是從事高精密業務,則需要考慮更高的精確度,
ps:有時候很多看似需要用數字存盤的資料,可能都是存的字串,

2.3 字符型別

char(4):
	定長型別  最多只能存四個字符 多了報錯少了自動空格填充至四個
varchar(4):
	變長型別  最多只能存四個字符 多了報錯少了有幾個則存幾個

"""研究定長與變長特性"""
	create table t10(id int,name char(4));
	create table t11(id int,name varchar(4));
	insert into t10 values(1,'jason');
	insert into t11 values(1,'jason');

"""5.6版本以后超出范圍不會報錯,而是自動幫你截取并保存(此行為不合理)"""
方式1:命令修改(暫時)
	show variables like '%mode%';    '''查看當前sql_mode'''
	set session    '''當前視窗有效'''
	set global     '''當前服務端有效'''
	set global sql_mode = 'strict_trans_tables';
	'''修改完畢后退出客戶端重新進入即可'''
	'''再次執行上述插入命令 會直接報錯'''
方式2:修改組態檔(永久)
	'''添加如下陳述句'''
	[mysqld]  
	sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

'''統計某個欄位資料的長度  char_length()'''
	insert into t10 values(2,'j');
	insert into t11 values(2,'t');
'''底層確實會填充  但是取出來的時候又會自動去除'''
	set global sql_mode = 'strict_trans_tables,pad_char_to_full_length';
	select char_length(name) from tb10;
	select char_length(name) from tb11;

2.4 char與varchar的對比

  • char

    優勢:整存整取,速度快

    劣勢:浪費存盤空間

  • varchar

    優勢:節省存盤空間

    劣勢:存取資料的速度較于char稍慢

補充:在創建欄位的時候可以加上相應的注釋

create table tb12(
	id int comment '序號',
	name char(4) comment '姓名'
);

2.5 整形中括號內數字的作用

create table t13(id int(3));
insert into t13 values(4444444);  '''正常顯示'''

在整型中括號內的數字并不是用來限制存盤的長度,而是用來控制展示的長度,需搭配約束條件(如:zerofill)一起使用,
我們以后在定義整型欄位的時候,基本不需要自己添加數字,使用默認的即可,

create table t14(id int(3) zerofill);
insert into t13 values(4);  '''顯示004'''
"""結論:整型比較特殊 是唯一個括號內的數字不是用來限制存盤長度的型別"""

2.6 列舉與集合型別

  • 列舉:enum(),多選一

    create table user1(
    	id int,
    	name varchar(32),
    	gender enum('male','female','others')
    );
    
    insert into user1 values(1,'jason','男');    '''報錯'''
    insert into user1 values(1,'jason','male');   '''正常'''
    
  • 集合:set(),多選多(包含了多選一)

    create table user2(
    	id int,
    	name char(16),
    	hobby set('basketball','football','doublecolorball')
    );
        
    insert into user2 values(1,'jason','basketball'); 
    insert into user2 values(2,'kevin','football,doublecolorball');
    

2.7 日期型別

date		年月日
datetime	年月日時分秒
time		時分秒
year		年份

create table client(
	id int,
    name varchar(32),
    reg_time date,
    birth datetime,
    study_time time,
    join_time year
);
insert into client values(1,'jason','2000-11-11','2000-1-21 11:11:11','11:11:11',1995);

三、創建表

3.1 創建表的完整語法

create table 表名(
	欄位名1 欄位型別(數字) 約束條件,
	欄位名2 欄位型別(數字) 約束條件,
	欄位名3 欄位型別(數字) 約束條件
);
  • 欄位名和欄位型別是必須的
  • 數字和約束條件是可選的,并且約束條件可以有多個,使用空格隔開即可
  • 最后一個陳述句的結尾不要加逗號

3.2 約束條件

約束條件相當于是在欄位型別的基礎之上添加的額外約束

  • unsigned:讓數字型別變為只允許正數

    create table tb1(id int unsigned);
    
  • zerofill:資料所占位數不夠時,多余的位數用數字0填充

    create table tb2(id int(4) zerofill);
    
  • not null:非空;

    create table tb3(
    	id int,
    	name varchar(32) not null
    );
    

    補充:新增表資料的方式

    • 方式1:按照欄位順序一一傳值

      insert into tb3 values(1,'jason');
      
    • 方式2:自定義傳值順序,也可以不傳

      insert into tb3(name,id) values('jason',1);
      insert into tb3(id) values(1);
      

    默認情況下,在MySQL中不傳資料,會使用關鍵字NULL填充,意思就是空 類似于Python中的None,

  • default:默認值

    所有的欄位都可以設定默認值,如果用戶沒有給該欄位傳值則使用默認值,否則使用所傳的值,

    create table tb4(
    	id int default 911,
    	name varchar(16) default 'jason'
    );
    
  • unique:唯一值

    • 單列唯一

      create table tb5(
      	id int,
      	name varchar(32) unique
      );
      
    • 聯合唯一

      create table tb5(
      	id int,
      	host varchar(32),
      	port int,
      	unique(host,port)
      );
      
  • primary key:主鍵

    單從約束層面上來說,相當于是 not null + unique(非空且唯一),并且在此基礎上還可以加快資料的查詢,

    InnoDB存盤引擎規定了一張表必須有且只有一個主鍵,因為InnoDB是通過主鍵的方式來構造表的,

    如果沒有設定主鍵,會分為兩種情況,如下:

    • 情況1:沒有主鍵和其他約束條件

      InnoDB會為每一行生成一個6位元組的ROWID,并以此作為主鍵,

    • 情況2:沒有主鍵但是有非空且唯一的欄位

      自動將該欄位升級為主鍵:

      create table tb6(
      	id int,
      	age int not null unique,  '''從上到下選取第一個非空唯一欄位作為主鍵'''
      	pwd int not null unique
      );
      

    結論:

    以后我們在創建表的時候一定要設定主鍵,并且主鍵欄位一般都設定為表的id欄位(uid、sid、pid、cid ...)

    create table user(
    	id int primary key,
    	name varchar(32)
    );
    
  • auto_increment:自增

    由于主鍵類似于資料的唯一標識,并且主鍵一般都是數字型別,

    我們在添加資料的時候不可能記住接下來的序號的是多少,這樣很麻煩,所以使用auto_increment 可以幫助我們實作主鍵欄位的自增,

    create table user1(
    	id int primary key auto_increment,
    	name varchar(32)
    );
    

    需要注意的一點是自增的特性:

    自增不會因為洗掉資料等操作而回退(delete from無法影響自增)

    如果想要重置需要使用truncate關鍵字:

    truncate 表名  '''清空表資料并且重置主鍵值'''
    

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

標籤:MySQL

上一篇:MySQL慢查詢優化問題-解決辦法

下一篇:MySQL慢查詢優化問題-解決辦法

標籤雲
其他(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