㈠ 面向對象程序設計中的數據封裝指的是
對象內部數據結構的不可訪問性 輸入數據必須用保密密碼輸入,數據加密,這不是面向對象編程的特點;不可能在對象的內部數據結構上建立防火牆,所以它們不是面向對象編程中的數據隱藏。面向對象編程系統中的封裝單元是對象,對象之間只能通過接缺腔口交換信息,對象中的數據不能從外部隨意訪問,導致對象內部的數據結構不可訪問,數據隱藏在對象中。這就是面向對象編程中的數據隱藏所指的。Redis是一個鍵-值對資料庫,每個鍵是一個字元串對象,值可以是字元串對象、列表對象、哈希對象、集合對象、有序集合對象五種中的一種。Redis使用sds(簡單動態字元串)來表示最基本的字元串數據。這個結構記錄了用於保存字元串的位元組數組char buf[]、已用長度int len和未用長度int free。有點像java中的字元串對象。這個sds使用C字元串作為文字量,遵循C風格,以空字元' '作為字元串的結尾,這樣就可以直接重用C字元串函數庫的部分函數,但與C字元串相比,它有以下優點:直接保存字元串長度而不是像C一樣遍歷得到長度;通過預分配空間和釋放惰性空間,減少了修改字元串引起的內存重分配。空間預分配的意思是:當需要擴展字元數組的容量時,如果分配的長度將小於1MB,則預分配搏笑與當前len長度相同的位元組數,如果超過1MB,則分配1MB。惰性空間釋放是指當sds字元串被縮短時,多餘的位元組數組不被伏銀衫回收,而是通過增長free來記錄,這樣下次如果free本身足夠了,就不需要申請內存了。當然,也有可以調整為主動釋放的API。用二進制方法處理buf數組,保留二進制數據,這樣就可以保存除文本數據以外的其他格式,比如圖片、音視頻、壓縮文件等。
㈡ 以下那種類別對應數據的字元類屬性
整數類型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
浮點數類型:FLOAT、DOUBLE、DECIMAL
字元串類型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
日期類型:Date、DateTime、TimeStamp、Time、Year
其他數據類型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等
1、整型
數據類型 位元組及范圍
tinyint(m) 1個位元組 (-128~127)
smallint(m) 2個位元組 (-32768~32767)
mediumint(m) 3個位元組 (-8388608~8388607)
int或integer(m) 4個位元組 (-2147483648~2147483647)
bigint(m) 8個位元組 (±9.22*10的18次方)
整型括弧中里的m是表示SELECT查詢結果集中的顯示寬度,並不攔基影響實際的取值范圍,沒有影響到顯示的寬度。(可以略過這個東西)
2、浮簡吵謹點型
數據類型 定義
float(m,d) 單精度浮點型 8位精度(4位元組)
double(m,d) 雙精度浮點型 16位精度(8位元組)
m總個數,d小數位。設一個欄位定義為float(6,3),如果插入一個數123.45678,實際資料庫里存的是123.457,但總個數還以實際為准,即6位。整數部分最大是3位。如果插入數12.123456,存儲的是12.1234,如果插入12.12,存儲的是12.1200.
3、定點數
①浮點型在資料庫中存放的是近似值,而定點類型在資料庫中存放的是精確值。
decimal(m,d)
②DECIMAL 類型不同於FLOAT和DECIMAL,其中DECIMAL 實際是以串存放的。DECIMAL 可能的最大取值范圍與DOUBLE 一樣,但是其有效的取值范圍由M 和D 的值決定。
給定的DECIMAL 類型的取值范圍取決於Mysql數據類型的版本。
③ 對貨幣等對精度敏感的數據,應該用定點數表示或存儲;
在這里插入圖片描述
4、字元串
數據類型 大小
char(n) 固定長度,最多255個字元
varchar(n) 固定長度,最多65535個字元
tinytext 可變長度,最多255個字元
text 可變長度,最多65535個字元
mediumtext 可變長度,最多2的24次方-1個字元
longtext 可變長度,最多2的32次方-1個字元
區別char和varchar:
①char(n) 若存入字元數小於n,則以空格補於其後,查詢之時再將空格去掉。所以char類型存儲的字元串末尾不能有空格,varchar不限於此。
②char(n) 固定長度,char(4)不管是存入幾個字元,都將佔用4個位元組;varchar是存入的實際字元數+1個位元組(n<=255)或2個位元組(n>255),所以varchar(4),存入3個字元將佔用4個位元組。
③char類型的字元串檢索速度要比varchar類型的快。
5、二進制數據(_Blob)
1._BLOB和_text存儲方式不同,_TEXT以文本方式存儲,英文存儲區分大小寫,而_Blob是以二進制方式存儲,不分大小寫。
2._BLOB存儲的數據只能整體讀出。
3._TEXT可以指定字元集,_BLO不用指定字元集。
6、日期碰告和時間類型
作用:存儲用戶注冊時間,文章發布時間,員工入職時間,出生時間,過期時間等
數據類型 定義
DATE 日期 『2008-12-2』
TIME 時間 『12:25:36』
YEAR 年份 『2008』
DATETIME 日期時間 『2008-12-2 22:06:44』
TIMESTAMP 自動存儲記錄修改時間
註:①TIMESTAMP列用於INSERT或UPDATE操作時記錄日期和時間。如果不分配一個值,表中的第一個TIMESTAMP列自動設置為最近操作的日期和時間。
②也可以通過分配一個NULL值,將TIMESTAMP列設置為當前的日期和時間。TIMESTAMP值返回後顯示為』YYYY-MM-DD HH:MM:SS』格式的字元串。
③有專有的自動更新特性。
二、數據類型屬性
關鍵字 含義
NULL 數據列可包含NULL值
NOT NULL 數據列不允許包含NULL值
DEFAULT 默認值
PRIMARY KEY 主鍵
AUTO_INCREMENT 自動遞增,適用於整數類型
UNSIGNED 無符號
CHARACTER SET name 指定一個字元集
三、簡單介紹幾個存儲引擎
1、MyISAM 數據存儲引擎和數據列
MyISAM數據表,最好使用固定長度(CHAR)的數據列代替可變長度(VARCHAR)的數據列。
2、MEMORY存儲引擎和數據列
MEMORY數據表目前都使用固定長度的數據行存儲,因此無論使用CHAR或VARCHAR列都沒有關系。兩者都是作為CHAR類型處理的。
3、InnoDB 存儲引擎和數據列(重要)
建議使用 VARCHAR類型。
也可以用show engines;語句查看所有引擎
在這里插入圖片描述
以下幾個例子
1、時間和日期
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
2、set
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
3、datatime
在這里插入圖片描述
4、TIMESTAMP
CREATE TABLE timestamp_db(
a TIMESTAMP
);
INSERT timestamp_db() VALUES(20020121);
INSERT timestamp_db() VALUES(20020121142554);
INSERT timestamp_db() VALUES("2015-12-16 21:14:15");
INSERT timestamp_db() VALUES("2015-12-17");
INSERT timestamp_db() VALUES(NULL);
INSERT timestamp_db() VALUES(CURRENT_TIMESTAMP);
INSERT timestamp_db() VALUES();
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
在這里插入圖片描述
5、YEAR
在這里插入圖片描述
文章知識點與官方知識檔案匹配
MySQL入門技能樹資料庫組成表
22468 人正在系統學習中
點擊閱讀全文
打開CSDN,閱讀體驗更佳
評論(2) 請先 登錄 後發表或查看評論
...知識之數據類型_小玉玉玉玉呀的博客_資料庫數據類型
四、日期時間類型 1、數據類型 date裡面 Y是年,M是月,D是天,即年月日;time裡面 H是時,M是分,S是秒 ,即時分秒。 eg:表中的money是充值金額,接著記錄一下充值時間,先添加一個時間欄位,類型是datetime, 然後刷新表格,再打開,...
MySQL資料庫中幾種常見的數據類型分享_ysds20211402的博客...
一、數據類型是什麼? 數據類型是指列、存儲過程參數、表達式和局部變數的數據特徵,它決定了數據的存儲格式,代表了不同的信息類型。 有一些數據是要存儲為數字的,數字當中有些是要存儲為整數、小數、日期型等... ...
Oracle 數據類型
Oracle的數據類型: 1、CHAR數據類型,該類型是固定長度的字元串,如果沒指定大小,則默認佔用一位元組,如果輸入的值小於指定的長度,則資料庫用空格填充至固定長度,如果用戶輸入的值大於指定的長度,則資料庫返回錯誤信息 2、varchar2,用於存儲可變長度的字元串,使用該數據類型可節省磁碟空間,但存儲效率沒有CHAR高 3、NCHAR和nvarchar2,NCHAR和CHAR區別在於NCHAR用來存儲Unicode字元集類型,即雙位元組字元數據,CHAR是一個位元組,而NCAHR是一個字元(兩個位元組),前者是CHAR(1)無法插入『的』,後者是NCHAR(1)可以插入『的』 4、NUMBER表示數值數據類型,NUMBER(P,S),P為精度,表示數據的總位數,S為范圍,表示小數點右邊數字的位數 5、DATE數據類型,使用7個位元組固定長度,每個位元組分別存儲世紀,年,月,日 ,時,分,秒,ORACLE中SYSDATE函數的功能是返回當前的日期和時間 6、TIMESTAMP數據類型,和DATE相似,但是這個類型的秒精確到小數點後6位,而DATE沒有秒的小數部分 7、LOB數據類型用於存儲大型的,沒有被結構化的數據,例如二進制文件,圖片文件,LOB主要分為BLOB和CLOB,BLOB數據類型用於存儲二進制對象:圖像,音頻,視頻...CLOB數據類型用於存儲字元格式的大型對象 8、ORACLE其實也支持INTEGER,FLOAT,DOUBLE,VARCHAR,最好用ORACLE自身的NUMBER 和 VARCHAR2
資料庫:常見的數據類型
文章目錄一、常見的數據類型1.數值型 一、常見的數據類型 1、數值型: 整型 小數: 定點數 浮點型 2、字元型: 較短的文本:char、varchar 較長的文本:text、blob(較長的二進制數據) 3、日期型 1.數值型 (1)整型 整數類型 位元組 范圍 Tinyint 1 有符號:-128~127 , 無符號:0~225
繼續訪問
資料庫的類型_彬仔二號的博客_資料庫類型
ps:資料庫的類型主要分為四大類:一:關系型資料庫。二:非關系型資料庫。三:網狀資料庫。四:層次資料庫。目前最常見的資料庫模型主要是:關系型資料庫和非關系型資料庫。 ps:這里我們主要說關系型資料庫和非關系型資料庫。
資料庫的數據類型
之前介紹了 資料庫基本常識的簡介及mysql安裝 結構化查詢語言sql 資料庫表介紹 接下來說一下資料庫的數據類型 資料庫的數據類型主要包括以下幾種 整數類型:一般常用的就是int=integer。可以在int後面加顯示寬度,例如int(4),但是超過這個長度也不會報錯,會進行自動擴充。 浮點類型:一般常用的是double。指定小數位和總長度double(4,1),表示小數點後保留1位,總長度為4位,並且不會自動擴充。如果出現插入的小數位數較多,則會進行四捨五入。 字元串類型:char和varch
繼續訪問
MySQL資料庫中幾種常見的數據類型分享
轉自:微點閱讀https://www.weidianyue.com 一、數據類型是什麼? 數據類型是指列、存儲過程參數、表達式和局部變數的數據特徵,它決定了數據的存儲格式,代表了不同的信息類型。 有一些數據是要存儲為數字的,數字當中有些是要存儲為整數、小數、日期型等... 二、MYSQL常見數據類型 MySQL支持多種類型,大致可以分為四類:數值型、浮點型、日期/時間和字元串(字元)類型。 1、數值類型 MySQL支持所有標准SQL數值數據類型。 這些數值類型包括嚴格數值數據類型..
繼續訪問
資料庫的類型
ps:資料庫的類型主要分為四大類:一:關系型資料庫。二:非關系型資料庫。三:網狀資料庫。四:層次資料庫。目前最常見的資料庫模型主要是:關系型資料庫和非關系型資料庫。ps:這里我們主要說關系型資料庫和費關系型資料庫。1. 關系型資料庫關系型資料庫模型是將復雜的數據結構用較為簡單的二元關系(二維表)來表示,如圖1-4所示。在該類型資料庫中,對數據的操作基本上都建立在一個或多個表格上,我們可以採用結構化查詢語言(SQL)對資料庫進行操作。關系型資料庫是目前主流的資料庫技術,其中具有代表性的資料庫管理系統有:Ora
繼續訪問
資料庫基礎知識之數據類型
mysql常用數據類型 一、數值類型(整型、浮點型) 1、整型 eg:添加一個表格:點擊表——添加欄位——名稱——類型,年齡age是tinyint類型,要在下方勾選無符號,因為年齡都是正數,不存在負數一說,所以不需要符號。 點擊保存,然後輸入表名,比如t1,就出現了t1 然後雙擊表裡面的null就可以修改值了 如果在年齡里寫了一個負數,再按ctrl+s保存,就會報錯: 由於范圍是0-255,所以當寫了256時,也會報錯: 2、浮點型 eg:想添加...
繼續訪問
資料庫修改數據類型
資料庫修改數據類型 在日常使用資料庫中,或多或少都會遇到要修改資料庫表中欄位的數據類型,有一種方法是直接點「設計」,就可以修改了,但往往都不行,會提示為「不允許保存修改」 那就用另一種方法。可以看到,表中的「B02_2」的數據類型是『nchar』,就把它數據類型修改為『int』 首先新建一個查詢 接著在查詢窗口裡輸入SQL 查詢語句,查詢表結構,找到需要修改的欄位 然後執行下面語句,命令已成功完成。 最後表中的「B02_2」的數據類型就修改為『int』了
繼續訪問
資料庫中修改數據類型
UNIT_PRICE :資料庫原先類型為: NUMBER(18,4) AMOUNT : 資料庫原先類型為: NUMBER(18,4) 如果直接進行修改會報錯,因為原先欄位中已經有數據了。 ALTER TABLE CLOUD_RELEASE.CONTRACT_PRODUCT_ITEM MODIFY(UNIT_PRICE NUMBER(18,6)); ALTER TABLE CLOUD_RELEASE.CONTRACT_PRODUCT_ITEM MODIFY(AMOUNT NUMBER(18,6));
繼續訪問
資料庫常見數據類型
常見的數據類型: 數值型: 整型:tinyint(1位元組)、smallint(2位元組)、mediumint(3位元組)、int/integer(4位元組)、bigint(8位元組) 特點:默認是有符號的,要設置無符號,需添加unsigned關鍵字;不設置長度,會有默認的長度,長度代表了顯示的最大寬度,如果不夠會用0在左邊填充。 小數: 浮點型:float(M,D)、double(M,D) 定點型:dec(M,D)、decimal(M,D) M:整數部位+小數部位 D:小數部位 M和D都可以省略
繼續訪問
【mysql】 數據表修改欄位的數據類型
【mysql】 數據表修改欄位的數據類型1、背景2、修改欄位的數據類型 1、背景 當數據表創建之後,發現數據表欄位的數據類型不合適,我們可以立即刪除後重新創建; 但是一旦存上大量數據之後,我們更希望直接修改數據表; 即修改數據表: 修改表指的是修改資料庫中已經存在的數據表的結構。 MySQL 中使用 ALTER TABLE 語句修改表。 2、修改欄位的數據類型 本博客涉及數據表中修改欄位的數據類型,即把欄位的數據類型轉換成另一種數據類型。 在 MySQL 中修改欄位數據類型的語法規則如下: ALTER TA
繼續訪問
資料庫中有哪幾種數據類型?
資料庫中有哪幾種數據類型? 整型: tiny int,small int,medium int,int,big int,大小分別為 8,16,24,32,64位。 浮點型: float、double 字元串類型: 定長的 char,變長的 varchar。在進行存儲時,char 會刪除末尾的空格,varchar 會保留末尾的空格。 日期時間類型: 與時區無關的 data time,與時區有關的 ...
繼續訪問
熱門推薦 八大基本數據類型(超詳細)
學習目標: Java八大數據類型: (1)整數類型:byte、short、int、long (2)小數類型:float、double (3)字元類型:char (4)布爾類型:boolean 學習內容: 1、 整數數據類型 byte:1個位元組,8位,256種狀態,取值范圍為【-128,127】 short:2個位元組,16位,65536種狀態,取值范圍為【-32768,32767】 int:4個位元組,32位,整數類型默認是int類型,取值范圍約21億 long:8個位元組,64位,long類型表示long類
繼續訪問
數據類型有哪些?如何判斷數據類型?
數據類型有哪些?如何判斷數據類型? 一、數據類型有兩種, 一種基本數據類型, 一種引用數據類型, 基本數據都有,string、number、Boolean、null、undefined; 引用數據類型有object, es6新增一個symbol 1、symbol類型 Symbol()返回的symbol值都是唯一的,使用Symbol()創建新的symbol值,並用一個可選的字元串作為其描述 —— 描述相同的兩個Symbol值依然是不同的 2、undefined類型 只有一個值。在使用var聲明變數但未對其加初
繼續訪問
資料庫常用的數據類型
數據類型1.整型:bit(布爾型):只能輸入true或false,輸入1是自動轉化為TRUE,0是自動轉化為FALSEtinyint:只能輸入0到225之間的整數smallint(兩個位元組組成的整數):-32768~32767int(四個位元組組成的整數):2的31次方bigint(八個位元組組成的整數):2的63次方2.貨幣型:money,可以四位小數3.日期型:data:2001.1.1~9999...
繼續訪問
21 常見的數據類型
常見的數據類型 1、數值型:整型、浮點型(定點數、浮點數) 2、字元型:較短的文本:CHAR、VARCHAR 較長的文本:TEXT、BLOB(較長的二進制數據) 3、日期型 一、整型 整數類型 位元組 范圍 Tinyint 1 有符號:-128-127 無符號:0~255 Smallint 2 有符號:-32768~32767 無符號:0~65536 Mediumint 3 有符號:-8388608~8388607 無符號:0~1677215 Int、Integer 4 有符
繼續訪問
最新發布 資料庫基本增刪改查語法和多表聯查方式
我們想要操作資料庫,主要需要使用的基本指令就是增刪改查,主要包括四個關鍵字,增:insert,刪:delete,改:update,查:select。接下來詳細的講一下這四種關鍵字的使用。
繼續訪問
SQL中改變列的數據類型
一、該列非主鍵、無default約束 直接更新: alter table 表名 alter column 列名 數據類型 二、該列為主鍵列、無default約束 (1)刪除主鍵 alter table 表名 drop constraint 主鍵名稱 (2)更新數據類型 alter table 表名 alter column 列名 數據類型 not null (3)添加主鍵 alter table ...
繼續訪問
MySQL修改列名稱或列的數據類型
一、只修改列的數據類型的方法: 語法: alter table 表名 modify column 列名 新的列的類型 例如:student表中列stu_name的類型是char(20),現在要修改為varchar(20),SQL語句如下 alter table student modify column stu_name varchar(20); 二、同時修改列名和列的數據
繼續訪問
python六種數據類型的增刪改查
六種數據類型的增刪改查1、字元串str2、列表list3、元組tuple4、字典dict5、集合set可變類型:list、set、dict不可變類型:string、tuple、數字型 1、字元串str 增:拼接+,* 刪:無 改:不可修改 查:index查字元串的索引值 2、列表list 增:append、insert、extend、update 刪:pop、del、remove、clear 改:...
繼續訪問
資料庫數據類型
㈢ 為什麼redis小等於39位元組的字元串是embstr編碼,大於39是raw編碼
作者:劉恆沖
鏈接:http://www.hu.com/question/25624589/answer/61382148
來源:知乎
著作權歸作者陪野所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
這個和redis的版本有關系。
查看redis-3.0和最新的版本的object.c文件,可以發現在創建StringObject的時候,會和REIDS_ENCODING_EMBSTR_SIZE_LIMIT比較,這個的默認值是39。
查看一下redis-2.8版本的源碼,並沒有發現比較,而是直接創建了。
所以我猜測這個embstr編碼是3.0以上版本才出現的。
至於為什麼是39,這個講起來就比較舉亂悔復雜了,我就慢點說。
embstr是一塊連正正續的內存區域,由redisObject和sdshdr組成。其中redisObject佔16個位元組,當buf內的字元串長度是39時,sdshdr的大小為8+39+1=48,那一個位元組是'\0'。加起來剛好64。是不是發現了什麼?
typedef struct redisObject {
unsigned type:4;
unsigned encoding:4;
unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */
int refcount;
void *ptr;
} robj;
struct sdshdr {
unsigned int len;
unsigned int free;
char buf[];
};
從2.4版本開始,redis開始使用jemalloc內存分配器。這個比glibc的malloc要好不少,還省內存。在這里可以簡單理解,jemalloc會分配8,16,32,64等位元組的內存。embstr最小為16+8+8+1=33,所以最小分配64位元組。當字元數小於39時,都會分配64位元組。
這個默認39就是這樣來的。
㈣ Redis SDS動態字元串跟C字元串 區別
<<redis的實現與設計>>, 一點點總結幫助自己更加了解redis底層。
redis底層沒有使用「C字元串」來表示,而是用自己構建的「SDS抽象類型」進行默認字元串表示。
C字元串儲存的數據,最後對會有一個空判盯高字元結尾. 舉個例子,比如說 "redis" 他在內容就是 'R' 'E' 'D' 'I' 'S' '\0'
SDS抽象類型內容有:
SDS結構如下圖所示
C字元串要進行遍歷才可以知道該字元串的長度 復雜度 O(n).
SDS只需要訪問內部的len屬性即可 時間復雜度O(1).
C字元串 設置了一個S1為 「redis」 ,但是底層有一個跟他相鄰的S2為「abc」,然後這里如果給S1通過函數 strcat 進行拼接S3 "ccc",然後最後結果應該是 「redisccc」, 但是如果本身給S1設掘尺置內存不夠的話,這樣會導致把與它相鄰的S2進行修改。
SDS 這里會先根據空間是否夠用,不夠則擴展空間到夠位置,並且會多添加len長度的free未使用的空間,比如說redis字元串的長度為5,然後還會空間預分配同等的長度5,最後實際空間長度為 free + len + 1 為 10。
c字元串,當給某個字元串加數據或減少數據的時候, 就會重新申請內存 但是如果過多的申請必然會導致性能的下降,更改N次則分配N次。
SDS 內部使用兩種機制 惰性空間釋放跟空間預分配
空間預分配:
惰性空間釋放
c字元串最後是由空字元結尾,但是如果有些特殊的數據需要空字元,會導致數據無法保存會導致提前識別第一個空字元之前的數據。 SDS 因為SDS是根據長度來進行識別字元串的所以可以保證數據的正確。
4.兼容部分c語言的函數 因為SDS也遵循C的以空字元為結尾,所以它可以使用C裡面的一些函數
一邊學習一邊記錄筆記, 加深記憶,加油,若有什麼問題則薯請指出,在此謝過。
㈤ Redis的五種數據結構及其底層實現原理
redis的字元串類型是由一種叫做簡單動態字元串(SDS)的數據類型來實現
SDC和C語言字元串的區別:
1:SDS保存了字元串的長度,而C語言不保存,只能遍歷找到第一個 的結束符才能確定字元串的長度
2:修改SDS,會檢查空間是否足夠,不足會先擴展空間,防止緩沖區溢出,C字元串不會檢查
3:SDS的預分配空間機制,可以減少為字元串重新分配空間的次數
備註:重新分配空間方式,小於1M的數據 翻倍+1,例如:13K+13K+1,如果大於1M,每次多分配1M,例如:10M+1M+1,如果字元串變短,並不會立即縮短,而是採用惰性空間釋放,有專門的API可以釋放多餘空間
hash結構里其實是一個字典,有許多的鍵值對
redis的哈希表是一個dictht結構體:
哈希表節點的結構體如下:
hash演算法:
當要將一個新的鍵值對添加到字典裡面時, 程序需要先根據鍵值對的鍵計算出哈希值和索引值, 然後再根據索引值, 將包含新鍵值對的哈希表節點放到哈希表數組的指定索引上面。
hash沖突解決方式:鏈表法,後入的放到最前面
rehash:
鍵值數據量變動時,時為了讓哈希表的負載因子(load factor)維持在一個合理的范圍之內, 當哈希表保存的鍵值對數量太多或者太少時, 程序需要對哈希表的大小進行相應的擴展或者收縮。
如果是擴充,新數組的空間大小為 大於2*used的2的n次方,比如:used=5,則去大於10的第一個2的n次方,為16
如果是縮小,新數組的空間大小為第一個不大於used的2的n次方,比如:used=5,則新大小為4
redis的list列表是使用雙向鏈表來實現的
···
typedef struct listNode {
struct listNode * pre; //前置節點
struct listNode * next; //後置節點
void * value; //節點的值
}
typedef struct list {
listNode *head; //表頭節點
listNode tail; //表尾節點
unsigned long len; //鏈表所包含的節點數量
void ( p) (void ptr); //節點值賦值函數 這里有問題
void ( free) (void ptr); //節點值釋放函數
int ( match) (void *ptr, void *key) //節點值對比函數
}
···
1:有序集合的底層實現之一是跳錶, 除此之外跳錶它在 Redis 中沒有其他應用。
2:整數集合(intset)是集合鍵的底層實現之一: 當一個集合只包含整數值元素, 並且這個集合的元素數量不多時, Redis 就會使用整數集合作為集合鍵的底層實現。
3:數據少是,使用ziplist(壓縮列表),佔用連續內存,每項元素都是(數據+score)的方式連續存儲,按照score從小到大排序。ziplist為了節省內存,每個元素佔用的空間可以不同,對於大數據(long long),就多用一些位元組存儲,而對於小的數據(short),就少用一些位元組來存儲。因此查找的時候需要按順序遍歷。ziplist省內存但是查找效率低。
無序集合可以用整數集合(intset)或者字典實現
Redis的5.0版本中,放出一個新的數據結構Stream。其實也是一個隊列,沒一個不同的key對應的是不同的隊列,沒個隊列的元素,也就是消息,都有一個msgid,並且需要保證msgid是嚴格遞增的。在Stream當中,消息是默認持久化的,即便是Redis重啟,也能夠讀取到信息。
Stream的多播,與其它隊列系統相似,對不同的消費者,也有消費者Group這樣的概念,不同的消費組,可以消費通一個消息,對於不同的消費組,都維護一個Idx下標,表示這一個消費群組費到了哪裡,每次進行消費,都會更新一下這個下標,往後面一位進行偏移。
跳躍表是一種有序數據結構,它通過在每個節點中維持多個指向其它節點的指針,從而大道快速訪問節點的目的,具有以下性質:
1:有很多層結構組成
2:每一層都是一個有序的鏈表,排列順序為由高到低,都至少包含兩個鏈表節點,分別是前面的head節點和後面的nil節點
3:最底層的鏈表包含了所有的元素
4:如果一個元素出現在某一層的鏈表中,那麼在該層之下的鏈表也全部都會出現
5:鏈表中的每個節點都包含兩個指針,一個指向同一層的下一個鏈表節點,另一個指向下一層的通一個鏈表節點
多個跳躍表節點構成一個跳躍表
1:搜索,從最高層的鏈表節點開始,如果比當前節點要大和比當前層的下一個節點要小,那麼則往下找,也及時和當前層的下一層的節點下一個節點
2:插入,首先確定插入的層數,有一種方法是拋一個硬幣,如果是正面就累加,直到遇到反面為止,最後記錄正面的次數作為插入的層數,當確定插入的層數K後,則需要將新元素插入從底層到K層
3:刪除,在各個層中找到包含指定值得節點,然後將節點從鏈表中刪除即可,如果刪除以後只剩下頭尾兩個節點,則刪除這一層。
整數集合是Redis用於保存整數值集合的抽象數據類型,它可以保存int16_t、int32_t、int64_t的整數值,並且保證集合中不會出現重復元素。
整數集合的每個元素都是contents數組的一個數據項,他們按照從小到大的順序排列,並且不包含任何重復項。
length屬性記錄了contents數組的大小。
需要注意的是雖然contents數組聲明為int8_t類型,但是實際上contents數組並不保存任何int8_t類型的值,其真正類型由encoding來決定。
壓縮列表(ziplist)是Redis為了節省內存而開發的,是由一系列特殊編碼的連續內存塊組成的順序型數據結構,一個壓縮列表可以包含任意多個節點(entry),每個節點可以保存一個位元組數組或一個整數值。
壓縮列表的原理:壓縮列表並不是對數據利用某種演算法進行壓縮的,而是將數據按照一定規則編碼在一塊連續的內存區域,目的是節省內存。
壓縮列表的每個節點構成如下:
㈥ Redis底層數據結構之string
我們都知道, Redis 是由 C 語言編寫的。在 C 語言中,字元串標准形式是以空字元 作為結束符的,但是 Redis 裡面的字元串卻沒有直接沿用 C 語言的字元串。主要是因為 C 語言中獲取字元串長度可以調用 strlen 這個標准函數,這個函數的時間復雜度是 O(N) ,由於 Redis 是單線程的,承受不了這個時間復雜度。
在上一篇文亮虧章中,我們介紹了 Redis 的 RedisObject 的數據結構,如下所示:
對於不同的對象, Redis 會使用不同的類型來存儲。對於同一種類型 type 會有不同的存儲形式 encoding 。對於 string 類型的字元串,其底層編碼方式共有三種,分別為 int 、 embstr 和 raw 。
使用 object encoding key 可以查看 key 對應的 encoding 類型,如下所示:
對於 embstr 和 raw 這兩種 encoding 類型,其存儲方式還不太一樣。對於 embstr 類型,它將 RedisObject 對象頭和 SDS 對象在內存中地址是連在一起的,但對於派畝 raw 類型,二者在內存地址不是連續的。
在介紹 string 類型的存儲類型時,我們說到,對於 embstr 和 raw 兩種類型其存儲方式不一樣,但 ptr 指針最後都指向一個 SDS 的結構。那什麼是 SDS 呢? Redis 中的字元串稱之為 Simple Dynamic String ,簡稱為 SDS 。與普通 C 語言的原始字元串結構相比, sds 多了一個 sdshdr 的頭部信息, sdshdr 基本數據結構如下所示:
可以看出, SDS 的結構有點類似於 Java 中的 ArrayList 。 buf[] 表示真正存儲的字元串內容, alloc 表示所分配的數組的長度, len 表示字元串的實際長度,並且由於 len 這個屬性的存在, Redis 可以在 O(1) 的時間復雜度內獲取數組長度。
為了追求對於內存的極致優化,對於不同長度的字元串, Redis 底層會採用不同的結構體來表示。在 Redis 中的 sds.h 源碼中存在著五種 sdshdr ,分別如下:
上面說了, Redis 底層會根據字元串的長度來決定具體使用哪種類型的 sdshdr 。可以看出, sdshdr5 明顯區別於其他四種結構,它一般只用於存儲長度不會變化,且長度小於32個字元的字元串。但現在一般都不再使用該結構, 因為其結構沒有 len 和 alloc 這兩個屬性,不具備動態擴容操作 ,一旦預分配的內存空間使用完,就需要重新分配內存並完成數據的復制和遷移,類似於 ArrayList 的擴容操作,這種操作對性能的影響很大。
上面介紹 sdshdr 屬性的時候說過, flag 這個屬性用於標識使用哪種 sdshdr 類型, flag 的低三位標識當前 sds 的類型,分別如下所示:
同時,注意到在每個 sdshdr 的頭定義上都有一個 attribute((packed)) ,這個是為了告訴 gcc 取消優化對齊 ,這樣,每個欄位分配的內存地址就是 緊緊排列在一起的 , Redis 中字元串參數的傳遞直接使用 char* 指針,其實現原理在於,由於 sdshdr 內存分配禁止了優化對齊,所以 sds[-1] 指向的就是 flags 屬性的內存地址,而通過 flags 屬性又可以確定 sdshdr 的屬性,進而可以讀取頭部欄位確定 sds 的相關屬性。
sds的邏輯圖如下所示:
相比較於 C 語言原始的字元串,塵鍵森 sdshdr 的具備一些優勢。
由於 sdshdr 中存在 len 這個屬性,所以可以在 O(1) 的時間復雜度下獲得長度;而傳統的 C 語言得使用 strlen 這個標准函數獲取,時間復雜度為 O(N) 。
原始的 C 語言一直使用與長度匹配的內存,這樣在追加字元串導致字元串長度發生變化時,就必須進行內存的重新分配。內存重新分配涉及到復雜演算法和系統調用,耗費性能和時間。對於 Redis 來說,它是單線程的,如果使用原始的字元串結構,勢必會引發頻繁的內存重分配,這個顯然是不合理的。
因而, sds 每次進行內存分配時,都會通過內存的預分配來減少因為修改字元串而引發的內存重分配次數。這個原理可以參數 Java 中的 ArrayList ,一般在使用 ArrayList 時都會建議使用帶有容量的構造方式,這樣可以避免頻繁 resize 。
對於 SDS 來說,當其使用 append 進行字元串追加時,程序會用 alloc-len 比較下剩下的空餘內存是否足夠分配追加的內容 ,如果不夠自然觸發內存重分配,而如果剩餘未使用內存空間足夠放下,那麼將直接進行分配,無需內存重分配。其擴容策略為, 當字元串佔用大小小於1M時,每次分配為 len * 2,也就是保留100%的冗餘;大於1M後,為了避免浪費,只多分配1M的空間。
通過這種預分配策略, SDS 將連續增長 N 次字元串所需的內存重分配次數 從必定 N 次降低為最多 N 次。
緩沖區溢出是指當某個數據超過了處理程序限制的范圍時,程序出現的異常操作。 原始的 C 語言中,是由編碼者自己來分配字元串的內存,當出現內存分配不足時就會發生 緩存區溢出 。而 sds 的修改函數在修改前會判斷內存,動態的分配內存,杜絕了 緩沖區溢出 的可能性。
對於原始的 C 語言字元串來說,它會通過判斷當前字元串中是否存在空字元 來確定是否已經是字元串的結尾。因而在某些情況下,如使用空格進行分割一段字元串時,或者是圖片或者視頻等二進制文件中存在 等,就會出問題。而 sds 不是通過空字元串來判斷字元串是否已經到結尾,而是通過 len 這個欄位的值。所以說, sds 還具備 二進制安全 這個特性,即可以安全的存儲具有特殊格式的二進制數據。
https://www.cnblogs.com/reecelin/p/13358432.html
㈦ 後綴名為sds的文件是什麼文件
程序開發操作系統軟體應用圖形圖象網路應用精文薈萃教育認證硬體維修Bea專區IBM專區
[ES-220] SDS軟體的介紹(翻譯之灌水篇二)
首頁:冊頌 >> 操作系統 >> Solairs 加入會員收藏夾
[ES-220] SDS軟體的介紹(翻譯之灌水篇二)方案
網制:http://www.itku.org/wz_32139/
閑來無喚姿坦事,翻譯著玩的,不過,原文是PDF地,
偶翻譯的格式是word地,貼上來之後好象有點問題地,
大家將就著看吧,哪天有空,偶把E文上傳一下!
第二章 Introction to Solstice DiskSuite Software
目標
通過本章的學習,你將掌握如下:
l 描述SUN的數據管理策略
l 列出Solstice DiskSuite的特點,功能和優點
l 描述以下SDS的關鍵技術和術語
n 串聯和條帶
n 鏡像
n RAID 5
n Hot Spares
n UFS記錄(Logging UFS UNIX File System)
n 磁碟集(disksets)
l 描述以下SDS metadevice類型
n 簡單和鏡像metadevice
n RAID和metatrans metadevice
l 定義鏡你的重新同步及為何需要的解釋
介紹l 為何選擇DiskSuitel 與兼容性相關的事宜
介紹
Solstice DiskSuite 4.2是一款軟體產品,允許和桐你管理大量的磁碟及磁碟上的數據
為何選擇DiskSuite
選擇使用DiskSuite有許多原因,大部分主要集中在2方面:
l 存儲容量
l 數據的有效性
兼容性
l 與早期的Solstice DiskSuite 4.1產品兼容
l 與DiskSuite 2.0.1及3.0產品並不向後兼容
l 與Solaris包一起提供,並做為一個未綁定的產品
l 運行於所有Solaris 2.6以後的操作環境及Sparc或x86平台
l 支持SparcStorage Array(SSA)陣列的 /, swap, /usr文件系統
l 包括了磁碟集(disksets)功能,這提供了在高可用性系統中能夠共享磁碟的功能。這個功能在x86平台上不提供
Metadevicesl 提供了虛擬磁碟l 數據可以跨越多個設備l 設備可以復合多種磁碟類型l 定義metadevice為最低可管理單元l 塊(block)或原(raw)是有效的l 提供了一個GUIl 默認為128個metadevice可以擴展到1024個
Metadevice
SDS軟體使用虛擬磁碟來管理物理磁碟及相關的數據。在SDS軟體中,一個虛擬磁碟被稱為:metadevice。一個metadevice可以在應用的視圖上標識為一個物理磁碟。SDS軟體的metadevice由片(slice)來建立。
Metadevice能跨越多個磁碟類型及不同的控制器。如,你可以定義一個metadevice由一個SCSI slice和另一個磁碟控制串上的智能外圍介面(Intelligent Perpheral Interface,IPI) slice 組成。在這個metadevice上的任何動作都將影響這2個磁碟片。
--------------------------------------------------------------------------------------------------
注意----SDS 4.2支持以下磁碟創建metadevice:SPARC---IPI和SCSI設備及SPARC Storage Array, x86---SCSI及IDE設備
--------------------------------------------------------------------------------------------------
特點
metadevice有以下特點:
l Metadevice是虛擬定義的並且是SDS操作的最小單元
l Metadevice可以用來描述一個單獨的磁碟片或一組磁碟片或磁碟
l 邏輯metadevice設備名的入口在文件:/dev/md/dsk(塊設備)
l 原metadevice設備名的入口在文件:/dev/md/rdsk(原設備)
l 默認的,有128個metadevice(d0---d127),然而,可以增加附加的metadevice。SDS可以最大支持1024個metadevice
關鍵技術(Key Technologies)
如圖2_0所示:
SDS軟體的功能將在本章後面詳細討論
關鍵技術包括:
l 磁碟鏡像
數據的多個拷貝保存在多個不同的物理磁碟上,支持2路和3路鏡像
l 磁碟條帶
在多個物理設備間進行數據交替
l 串聯
復合2個或多個物理設備為一個單獨的邏輯設備
l RAID 5
在多個物理設備間進行數據和奇偶校驗的交替
l UFS日誌
在一個日誌中(稱為日誌設備)記錄UFS的更新,在這些更新應用到UFS文件系統之前
l 擴展文件系統(UFS)
在一個UNIX文件系統被載入時增加它的大小並且不中斷對數據的訪問(允許讀,禁止寫,直到完成grow操作)
l 磁碟集(Disksets)
分組2個主機,並設置一個共享的磁碟驅動;2個主機可以唯一的訪問磁碟集中的驅動(不是同時訪問);磁碟集中的驅動包括邏輯設備(metadevice)和hot spares
l hot spares
設置一個組件可以自動的替換RAID或鏡像設備中失敗的組件
SDS 支持
如圖2_1
SDS軟體包括以下功能:
l 磁碟串聯
對一個需要大量數據區的應用,這個功能是有效的。它復合了多個物理磁碟來創建一個大的metadevice。數據以連續的方式被組織並且每個磁碟是相鄰的,形成一個邏輯存儲單元
l 磁碟鏡像
通過同時對2個或多個磁碟寫入同樣的數據來防止磁碟失敗。任何文件系統都可以被鏡像,包括:root, swap, /usr
l 磁碟條帶
通過2個或多個片來交替相等大小的段,來形成一個邏輯存儲單元
l RAID
Rendant Array Inexpensive Disk的縮寫
l growfs
一個與newfs功能相似的命令,允許你在一個片中,不丟失任何數據的情況下增加一個片的大小。growfs在線使用(hot),在它運行的時候,緩存(buffer)寫請求,在growfs結束後,再來完成。客戶不必等待它完成
l hot spares
在一個鏡像無效後,可以自動在線並重新進行同步的片。可以在一個hot spare池(在這里,軟體可以選擇一個有效的驅動)來創建hot spare
l UFS日誌
用來增加操作系統的reboot時間,並減少同步磁碟寫的數量
l 磁碟集
分組2個主機,並設置一個共享的磁碟驅動,這個功能提供了在一個HA環境中主機共享磁碟的功能。
使用DiskSuite的優點
如圖2_2
主要包括:
l 可用性
支持對數據的讀寫訪問,一旦發生磁碟失敗,鏡像,RAID 5及hot spare等功能都可以保持數據的可用性,UFS日誌允許在系統崩潰之後更快的恢復其有效性。
l 可靠性
數據被干凈的保護
l 性能
在I/O性能方面有總體的提高;條帶平衡了載入來提高性能;UFS日誌提高了同步寫性能。
l 容量
文件系統的大小可以超過一個單獨的物理磁碟
l 管理
一個完整的GUI介面,可以動態的增長文件系統,並且hot spare功能也使系統管理變得容易
SDS軟體的組件
如圖2_3
SDS軟體主要包括這些組件:
l DiskSuite Tool
一個可以表示所有metadevice的GUI介面,並且提供了簡單的即拖即用介面來創建和維護資料庫的復制狀態和metadevice
l 設備驅動(device driver)
SDS軟體使用一個特定的設備驅動如metadisk 驅動從metadevice到物理設備來匹配I/O。允許應用把metadevice作為一個物理盤來對待,這種類型的驅動也稱為邏輯或偽設備(pseudo)
l 命令
SDS軟體提供了一個命令行介面,可以用來管理產品
l 配置文件
SDS軟體使用到幾個系統和啟動文件。你可以通過手工修改文件:/etc/opt/SUNWmd/md.tab來創建metadevice,狀態資料庫的復制及hot spare。
l 狀態資料庫復制(state database replicas)
這些資料庫保存著與之相連接的磁碟和它們的配置信息。它們通常是通過驅動器進行復制來避免一個單點失敗
n 通過每磁碟的獨立控制器來擴展載入
n 在一個鏡像中以讀參數來進行試驗。默認的,按順序讀取每個驅動器,但與載入有關,這會降低性能
n 在單獨的metadevice上,避免了不同類型驅動器的混雜。存儲模塊設備(SMD),SCSI及IPI都有著不同的吞吐量
n 如果你串聯了一個片,同時,要為HA來鏡像它
n 當使用UFS日誌功能,鏡像日誌設備
n 為了完成一個簡單的HA解決方案,鏡像你的數據磁碟,並設置2個系統,每個系統有屬於它自己的內部系統盤。如果一個系統down機,你可以加入鏡像到spare系統中。
l 如果你運行了Sun Prestoserve 軟體,不要在鏡像上(或子鏡像)使用Prestorserve功能,trans metadevice或狀態資料庫的復制
命令總結
SDS產品主要包括以下命令:
SDS命令 描 述
growfs 使用非破壞性的方式來擴展一個UFS文件系統
mdlogd 使用mdlogd守護進程和mdlogd.cf配置文件來發送SNMP trap信息
metaclear 刪除活動metadevice及hot spare 池
metadb 創建和刪除狀態資料庫的復制
metadetach 在一個鏡像中分離一個metadevice,或從一個trans metadevice中分離一個日誌設備
metahs 管理hot spare或hot spare 池
metainit 通過讀取文件:/etc/opt/SUNWmd/md.tab來配置metadevice
metaoffline 替換離線的子鏡像
metaonline 替換在線的子鏡像
metaparam 修改metadevice參數
metarename 修改或switch metadevice名字
metareplace 替換子鏡像和RAID 5的metadevice的片
metaroot 為鏡像 root(/)分區來設置系統文件
metaset 管理磁碟集
metastat 顯示metadevice或hot spare的狀態
metasync 在重啟動過程中重新同步metadevice
metatool 運行DiskSuite的圖形用戶介面
metattach 連接一個鏡像的metadevice或連接一個trans metadevice的日誌設備
現有的產品功能l SPARCstorage Array (SSA)管理l Metadevice的重命名和switchingl 事件通知l SunNet 管理器l SDS管理l 性能監視
產品功能
已經存在的產品功能
這些功能包括:
l SPARCstorage Array(SSA)管理
在SPARCstorage Array 1x0和2x0上,DiskSuite工具已經增強了管理任務性能,這些管理任務包括啟用或禁止NVROM,停止和啟動磁碟,及查看控制器風扇和電池狀態
l Metadevice的重命名及Switching
通過支持metadevice名字的重配置SDS簡化了metadevice的管理
l 事件通知
當在metadevice中發生了狀態改變時,DiskSuite工具自動更新事件通知。狀態改變包括:metadevice創建,刪除,及片錯誤
l SunNet 管理器
SDS產品能夠通過SNMP協議傳輸失敗或錯誤警告給一個SunNet管理控制器。反過來說,SunNet 管理器允許執行DiskSuite工具
l SDS管理
SDS產品工作於AdminSuite存儲管理軟體下,它提供了文件系統和物理磁碟的管理功能。存儲管理通過綜合DiskSuite工具,允許你在兩個工具間進行拖拽
l 性能監視
DiskSuite工具為你對於metadevice和物理磁碟提供簡單的性能監視能力。這允許你監視通常的性能趨向,查看突然的改變,及對比一個配置不同部分的數據收集
新的產品功能l 64位兼容l 支持路徑選擇(Alternate Pathing support)l 支持Solaris 2.6和Solaris 2.7l 兼容Y2Kl 完成了國際化(Internationalization complete)
產品功能
新功能
SDS4.2包括以下新功能:
l SDS4.2是64位兼容的。這意味著DiskSuite可以在Solaris 7上操作,SDS可以識別計算機是基於64位或是32位模式的,4.2對這兩個模式都支持。
l SDS支持路徑選擇。DS可以識別提供給E10000的,進行路徑選擇的偽設備
l 在SPARC和x86平台上提高了數據的可靠性和性能的增強。它們包括:
n SDS支持Solaris 2.6或7
n 你可以使用DS工具而無需安裝Solstice AdminSuite
n SDS兼容Y2K
n SDS文檔在AnswerBook2格式下是可用的
n 完成了國際化工作
n SDS可以在路徑選擇(AP)方式下執行
n SDS內核線程堅持了Check Point Restart(CPR)協議
n FCAL磁碟可以hot spare方式工作。這項功能覆蓋了產品A5200,A3500等
n 對於原設備(raw)及直接I/O存取檢查Write-on-write條件
solstice 回復於:2003-08-11 11:51:04
我倒,看的人多,回的人少,
不行,偶頂!
liqing 回復於:2003-08-11 12:21:20
支持一下,不過最好還是把英文共享一下。
guchengman 回復於:2003-08-13 15:59:00
我也頂.
正需要這個.
allonsun 回復於:2003-08-14 10:19:22
那麼辛苦我來頂
iricyan 回復於:2003-11-06 01:28:13
如果配上圖片,加上實例,就好看多了。不過這個也不是很難。
[ES-220] SDS軟體的介紹(翻譯之灌水篇二)解決處理
2006-2008 itku.org, all rights reserved 我要統計
㈧ 三位字元串表示什麼
返回主頁
往事隨風
博客園
首頁
聯系
管理
01--string數據類型的結構及應用場景分析
一、string類型
SDS(Simple Dynamic Strings, 簡單動態字元串)是 Redis 的一種基本數據結祥悄構,主要是用於存儲字元串和整數。
老的sds結構:
整個sds結構體由三部分組成,其中:buf 表示數據空間,用於存儲字元串;len 表示 buf 中已佔用的位元組數,也即字元串長度;free 表示buf 中剩餘可用位元組數。
好處:
- 用單獨的變數 len 和 free,可以方便地獲取字元串長度和剩餘空間;
- 內容存儲在動態數組 buf 中,SDS 對上層暴露的指針指向 buf,而不是指向結構體 SDS。因此,上層可以像讀取 C 字元 串一樣讀取 SDS 的內容,兼容 C 語言處理字元串的各種函數,同時也能通過 buf 地址的偏移,方便地獲取其他變數;
- 讀寫字元串不依賴於 \0,保證二進制安全。
壞處:
- 對於不同長度的字元串,沒有必要使用 len 和 free 這 2 個 4 位元組的變數
- 4 位元組的 len,可表示的字元串長度為 2^32,而在實際應用中,存放於 Redis 中的字元串往往沒有這么長,因此,空間的使用上能否進一步壓縮
新的sds結構
新sds結構圖
增加了一個 flags 欄位來標識類型,用一個位元組(8 位)來存儲。
其中:前 3 位表示字元串的類型;剩餘 5 位,可以用來存儲長度小於 32 的短字元串。
而對於長度大於 31 的字元串,僅僅靠 flags 的後 5 位來存儲長度明顯是不夠的,需要用另外的變數雹碼來存儲。sdshdr8、sdshdr16、sdshdr32、源宴哪sdshdr64 的數據結構定義如下,其中 :
len 表示已使用的長度
alloc 表示總長度
buf 存儲實際內容
flags 的前 3 位依然存儲類型,後 5 位則預留
struct __attribute__ ((__packed__)) sdshdr8 {
uint8_t len; /* 已使用長度,1位元組 */
uint8_t alloc; /* 總長度,1位元組 */
unsigned char flags; /* 前3位存儲類型,後5位預留 */
char buf[];};
struct __attribute__ ((__p
㈨ SDS 是什麼
SDS:Safety Data Sheet在歐洲國家,MSDS也被稱為安全技術/數據說明書SDS(Safety Data Sheet)。 國際標准化組織 (ISO)11014採用SDS術語,然而美國、加拿大,澳洲以及亞洲許多國家則採用MSDS術語。 結構化查詢語言數據服務SDS是結構化查詢語言數據服務SDS是SQL Data Service的縮寫,原名SQL Server Data Service(SSDS)。 基本概念 大步邁向SAAS,作為一個Web存儲服務,SDS是微軟與Amazon S3進行競爭的產品。SDS是繼BizTalk Services之後,微軟的另一個運行於Web之上的服務。 你可以認為SDS是一個可以存儲結構化數據的雲(用以構建大型應用,雲計算(Cloud Computing)這個繼網格計算之後的又一IT技術熱點,其基本原理就是動用互聯網上大量的分布式計算機來代替本地計算機或遠程伺服器幫助企業完成大量計算任務,為企業節省了大量時間和設備成本,從而能夠將更多的資源放在自身業務的發展上),你可以使用基本的數據操作語言通過互聯網協議對它進行訪問。SDS是為那些對系統擴展性有要求、需要簡化編程、及對數據存儲有強健查詢能力的需求而又對成本敏感的開發者和商業應用而設計。 SQL Data Service提供了一個靈活的數據模型,它被構建成這樣的一種結構:Customer > Account > Authority > Container > Entity。Customer是使用SDS的公司或獨立開發者;每個Customer都可能會創建數量極多的賬號;這些賬號與一個唯游逗一的 Windows Live Id相關聯;認證是一個與命名空間相似的概念,它與賬單和Geo-Location定位系統相關聯;Container則是保持一致性的單元,以確定搜索和更新操作的邊界范圍;最小和最基礎的數據單元就是Entity。 Neil Hudson將這個最基礎的數據單元稱為「Flexible Entity Model,它對結構沒有要求,你可以直接更新成對的name/value(這也就是最小的存儲單位)」。成對的name/value代表著屬性,其中的類型信息可以隨時被改變。屬性也可以隨時添加。SDS支持「簡單的類型,如decimal、string、bool等,而且所有的屬性都會被索引」。 數據可以通過多種方式進行訪問和修改: Microsoft Sync Framework (離線訪問) ADO.NET Data Services REST SOAP 在Authority、Container和Entity層,可以對數據進行CRUD操作。可以通過支持LINQ的C#語法的文本查詢語言來進行查詢。 SDS相當於Salesforce.com版本的資料庫。扒拍它針對以Web為中心的開發人員,尤其是新興公司的開發人員。出於對復雜性或成本的考慮 ,他們不想管理自己的資料庫。 雖然用戶為了把SDS與其他應用連接起來,需要了解流行的Web 2.0編程介面,如代表性狀態傳輸REST和簡單對象訪問協議(SOAP),但他們用不著了解傳統SQL就能獲取及使用數據。確切地說,數據使用LINQ進行查詢,LINQ是類似SQL的.Net框架的一個部分。使用微軟同步框架(Microsoft Sync Framework),還有可能與其他對象(如移動設備)進行同步。 雖然微軟在後端使用SQL Server 2008(及Windows Server 2008),但SSDS根本不像SQL伺服器的Web託管版本。後者問世已有數年,但提供該產品的是託管服神此賣務合作夥伴,而不是微軟本身。在這種情況下,用戶仍需要常常管理(遠程管理)整個SQL伺服器資料庫,通常還需要購買SQL伺服器許可證及底層硬體。 不過,SDS最初不會提供類似SQL伺服器的特性; 盡管SSDS如今被認為是企業級產品,但本身仍缺乏Oracle資料庫或者IBM DB2的許多特性。SDS可能也不是微軟正在開發的惟一基於雲計算的SQL伺服器版本。 主要特點和解決方案 Application Agility for quick deployment(快速部署、敏捷應用) 支持標准互聯網協議REST、SOAP(Internet standard protocols and Interfaces (REST, SOAP).) 靈活的數據類型,沒有模式的要求(Flexible data model with no schema required.). 簡單的基於文本的查詢模型(Simple text base query model.) 可在任何 編程環境下簡單編程(Easy to program to from any programming environment.) On-Demand Scalability(根據需要可擴展) 易於儲存和訪問(Easy storage and access. Pay as you grow model.) 級數增長Scales as data grows.) 供給、部署和監測的web服務(Web services for provisioning, deployment, and monitoring.) Business-Ready SLA(ServiceLevel Agreement) 基於健全的Microsoft SQL Server資料庫和Windows伺服器技術(Built on robust Microsoft SQL Server database and Windows server technologies.) 為可靠性和可用性存儲和管理多個鏡像(Store and manage multiple copies of the data for reliability and availability.) 利用族備份,確保業務的連續性(Back up data stored in each data cluster. Geo-rendant data copies to ensure business continuity.) 利用安全的數據通道提供商業機密及個人隱私(Secure data access to help provide business confidentiality and privacy.) 十二烷基硫酸鈉化學品中文名稱: 十二烷基硫酸鈉 英文名稱: dodecyl sulfate,sodium salt 簡稱:SDS 技術說明書編碼: 2036 CAS No.: 151-21-3 分子式: C12H25SO4Na 分子量: 288.38 抑鬱自評量表(SDS)測試簡介 作為一種自評量表,在自評者評定之前,一定要讓他把整個量表的填寫方法及每個問題的涵義都弄明白,然後作出獨立的、不受他人影響的自我評定。評定時須根據最近一星期的實際情況來回答。否則,測驗的結果不可信。 測試說明: 本評定量表共有20個題目,分別列出了有些人可能會有的問題。請仔細閱讀每一條目,然後根據最近一星期以內你的實際感受,選擇一個與你的情況最相符合的答案。A表示沒有該項症狀,B.小部分時間,C表示相當多的時間有該症狀,D表示絕大部分時間或全部時間。 請你不要有所顧忌,應該根據自己的真實體驗和實際情況來回答,不要花費太多的時間去思考,應順其自然,應根據第一印象作出判斷。 注意:測驗中的每一個問題都要回答,不要遺漏,以避免影響測驗結果的准確性。 1.我覺得悶悶不樂,情緒低沉。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 2.我覺得一天之中早晨最好。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 3.我一陣陣哭出來或覺得想哭。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 4.我晚上睡眠不好。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 5.我吃得跟平常一樣多。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 6.我與異性密切接觸時和以往一樣感到愉快。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 7.我發覺我的體重在下降。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 8.我有便秘的苦惱。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 9.我心跳比平時快。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 10.我無緣無故的感到疲乏。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 11.我的頭腦跟平常一樣清楚。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 12.我覺得經常做的事情並沒有困難。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 13.我覺得不安而平靜不下來。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 14.我對將來抱有希望。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 15.我比平常容易生氣激動。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 16.我覺得作出決定是容易的。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 17.我覺得自己是個有用的人,有人需要我。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 18.我的生活過的很有意思。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 19.我認為如果我死了別人會生活得好些。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 20.平常感興趣的事我仍然照樣感興趣。 A.很少 B.小部分時間 C.相當多的時間 D.絕大部分時間 評分標准: 此剖析圖結果給出的是標准分,分數越高,表示這方面的症狀越嚴重。一般來說,抑鬱總分低於50分者為正常;53-62者為輕度,63-72者是中度,72 以上者是重度抑鬱。陰性項目數表示被試在多少個項目上沒有反應,陽性項目數表示被試在多少個項目上有反應。 SDS:狗類,選擇性耳聾綜合症 SDS----Special Duty Squad (特別職務隊)每一個警區, 都會設立SDS, 專職處理自己警區的黃; 賭; 毒問題, 以毒品為例, SDS會針對自己警區內的毒品走勢, 進行情報搜集, 分析, 待時機成熟, 便會進行拘捕.因SDS只負責自己警區內的毒品問題, 故層面可能較細, 如毒品零售, 分銷中心等.而且現時的毒犯大多把零售, 分銷, 儲存, 製造分得很仔細, 可能同一集團, 會在不同警區, 有不同工作.故當SDS在處理情報搜集, 分析時, 如發現情況會牽涉其他警區, 便會聯同該警區的SDS進行聯合行動. 但如分析時, 發現SDS可能未可應付時, 便會轉交較高層面的RSDS處理. (2)RSDS---- Regional Special Duty Squad(總區特別職務隊) 每一個總區, 都會設立RSDS, 專職處理自己總區的黃; 賭; 毒問題, 以毒品為例, 同樣RSDS會針對自己總區內的毒品走勢, 進行情報搜集, 分析, 待時機成熟, 便會進行拘捕.以西九龍RSDS為例, 其專責整個西九龍, 故在人手, 裝備上, 遠較警區的SDS為好, 故專責的層面亦較高, 如毒品零售, 分銷中心, 儲存倉, 制毒工場等. 但如分析時, 發現情報會牽涉香港境外情況, 就會轉交更高層面的NB(毒品調查科)處理. SDS:音頻軟體所保存的一種格式Goldwave音頻編輯軟體的保存格式之一(MIDI音頻采樣) SDS:Shared Disk Secondary在Informix 11版中,為了避免RAC的Overhead問題來設計。延伸HDR的技術,更新增了RSS伺服器(Remote Standalone Secondary)可以跨越地區,進行遠端的資料庫復制,達到異地備援的效果。RSS伺服器同樣透過Log紀錄更新內容,並且可提供資料查詢。也可以像HDR的附屬伺服器(Secondary)能夠在主要伺服器故障時,升級為主要伺服器接手工作。針對主要伺服器的支援,新增一種共享磁碟的附屬伺服器(Shared Disk Secondary,SDS),可以分擔主要伺服器的查詢或唯讀性質的服務功能。SDS提供企業更大的彈性,能夠因應資料庫的使用情形平衡負載,很適合使用在刀鋒伺服器。例如在假期高峰期間,直接增加一刀伺服器執行SDS,就能立即上線分擔流量。
㈩ Redis-動態字元串
注意 : 當字元串長度為不小於44時,該類型為raw類型
其中:
SDS結構體的大小
SDS的大小是 : 1+1+1+?,所磨旁以一個SDS的大小最小是3個位元組.所以存在redis中一個字元串數據大小,最小16+3個位元組,19個位元組.
而內存分配器等分內存的大小的單位是2的冪次:2/4/8/16/32/64.為了能容納一個完成的字元串,那瞎慶橡么最少分配32個位元組空間.如果字元串稍微大一點就是64個位元組空間.如果總體超出了 64 位元組,Redis 認為它是一個大字元串,不再使用 emdstr 形式存儲,而該用 raw 形式。
為什麼redis會在超過64個位元組時差派當做raw處理呢.或者說為什麼字元串長度為44時,就變為了raw呢?
首先,raw是指redis動態字元串,是radis對c語言原生字元串的一種包裝.而原生c語言的字元串,最後一個始終使用 的字元串結尾,是為了方便使用glibc的字元串函數處理,及便於列印輸出.而 64-19(所有頭佔用的)=45 個字元串.字元串又是以 結尾,所以embstr 最大能容納的字元串長度就是 44.