过来看看.
转义的问题, 如果说把 ([\x00-\x0f]) 替换成 \x01\1 的话, 那替换后的 \x01\x01\x01 之前应该是什么呢? 没有非法串的判定是不行的. special_char_escape_shift 可以调整成大于 special_char_noescape_min (但小于 255 – special_char_noescape_min ) 的数值, 设置成 \x40 也是为了调试方便, \x40 到 \x4f 都属于可见字符, \x30 也挺好的… 多一个位是吧. 把 + 换成 and 或者 xor 都能用. 多好. 这都是编译器的事情… 跑题…
读 port 和写 port 的问题, 注意这里的隔离级别相当于 read committed (应该是这样).
不过 innodb 可挖掘的空间还很大, 但 b-tree 再怎么优化也还是逃不脱 IO 复杂度的宿命… 说多了, 睡去了
\n 0x0a
\r 0x0d
\t 0×09 —这个应该自己…
echo | awk ‘{}’ | hexdump
0000000 0a 09 0d
本来就不是让你这么用的. 懒到不会用工具了. 随便一个 hex editor + netcat 不就完了, 还 telnet.
事务隔离级别虽然没有特殊设定, 正是因为这个才得到这个结论. 没有 commit 的这一组数据读不出来, 当然是 read committed. 这里就不像 memcached 的延迟那么小了. 反过来说, 如果用 myisam 的话, 写的时候会把读也阻塞掉, 当然也是 read committed, 虽然 myisam 根本没事务这说.
(bigtable 系) sstable 就没有随机写. 但对整体的要求是挺高的. 谁能把随机写干掉就要谁. 随机读的 io 开销降不下去. nosql 啊, 拼的就是索引技术啊, 事务啥的都靠边了. 先把索引弄好, 再把事务加回来.
@fcicq
呃,我没说清楚。我的本意是:仅仅是因为\r\n在[0x00-0x0F]的范围内,就选了这个作为special_char_noescape_min?为什么不是[0x00-0x1F]或者[0x09-0x0d]? 感觉有点钻牛角尖了….囧
如果在my.cnf中将隔离级别设置成read uncommited呢?在write port中未commit的事务更改一样也可以被读到。所以我理解它就是:mysql的事务隔离级别 + 引擎处理(myisam不支持事务的引擎不关心这个) + 组提交。说是read commited可能不太准确。
SSTable系列在特定场景下是很好的solution,但也有它的局限性,比如range-scan,多个mempatch的merge-dump问题、数据删除问题等。不过总体来看,SSTable系的服务是一个很好的方向,bigtable/cassandra等都基于这个思路实现,我们公司也有类似的产品。memory is disk这个还是大趋势。
行啊. \x00-\x1f 真的也行. 效率下降概不负责.
隔离级别: 这叫自己没事找事降级… 这个降级不是 HS 引起的, 是你干的… 但把 repeatable read 降到 read committed 是 HS 干的. 这里的级别是相对于 read port 来说的. 注意 read port 里面没有事务. 事务读本身也是事务. 直接操作存储引擎这种事情啊… 太乱了. 算了, 这种事情不能说, 一说就要绕进去…
说的是索引技术. 这些局限性… 你全往分布式方向上考虑就没法比了, 你拿 mysql 集群做 range-scan 试试? 偶说单机版 bigtable 就爱怎么事务怎么事务. 这个没错吧? 偶没感觉删除问题有多难, 只是有些人老是想着把删除标记也扔掉.
memory is disk 不假, 但并不是说 tape 就不能用了 memory & SSD 帮你冲 IOPS. 主存用 HDD 完全没问题.