MongoDB: 关系中最KV的,KV中最关系的存储系统.
那问题来了,MySQL就不能K/V么?
用MySQL内存表实现K/V存储也可以,设置3个字段,分别为键/值/时间,比如:
CREATE TABLE IF NOT EXISTS mem (
k varchar(32) NOT NULL,
v text NOT NULL,
t bigint(20) unsigned NOT NULL,
PRIMARY KEY (k) USING HASH,
KEY (t) USING HASH
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
INSERT INTO mem (k, v, t) VALUES ('key1', 'value1', '20160906173140');
INSERT INTO mem (k, v, t) VALUES ('key2', 'value2', '20160906173140');
时间格式时date('YmdHis'),添加索引,用于检索.
8个字节的bigint(20)比14*3个字节的char(14)省空间.
键最长为32个字符,超过大小可以编码为MD5后存储.
值最长为floor((65535-2)/3)=21844个utf8字符,
这是因为text类型最多存储65535字节的文本字段,
存储时在内容前使用2字节表示内容的字节数.
除以3是因为一个utf8字符占用3个字节.
floor为向下取整.