分类: IT业界
2011-12-02 21:02:42
可是,当服务器封闭之时,所有存储在Memory表里的数据被丢失。由于表的定义被存在磁盘上的.frm文件中,所以表自身继承存在,在服务器重启动时它们是空的。
充分施展内存引擎的特点:高速度,低延迟。
每个Memory表和一个磁盘文件联系关系起来。
Shared-nothing和分布式架构保证无单点故障,99.999% 可用性。
可选择磁盘存储介质永久保留数据。
行锁机制更好的支持多线程多用户并发。由于官方最新的文档都是英文版的,所以译了5.5版本 MySQL Memory Storage章节。文件名由表的名字开始,并且由一个.frm的扩展名来指明它存储的表定义。
【IT168技术】需求源自项目中的MemCache需求,开始想用MemCached(官方站点: ),但这个在Linux下面应用广泛的开源软件无官方支持的Windows版本。
支持MEMORY中不支持的变长数据类型(包括BLOB 和 TEXT)。
MySQL Cluster(集群)支持与Memory引擎同样的功能并且提供更高的机能,同时拥有Memory不支持的更多其它功能:
但是内存表的机能受制于单线程的执行效率和写操纵时的表锁销,这就限制了内存表高负载时的扩展性,特别是混合写操纵的并发处理。后来看到博客园在用NorthScale Memcached Server(官方站点:),貌似共享收费,又犹豫了。这使得它们非常快,并且对创建临时表非常有用。
数据自动分布在各个节点,应用开发者无需考虑分区或分片解决方案。实在项目里的需求很简朴,也想自己用.Net Cache来实现,但不乱性难以评估,开发维护本钱又好像太大,没办法,My SQL Memory Storage成了独一选择,由于几乎不怎么需要编写代码。
(译自5.5版本的The Memory Storage Engine)
先看官方手册,然后写了个简朴的机能测试。
只读或读为主的访问模式(不适合频繁写)。此外,内存表中的数据在服启后会丢失。
更好的支持读写混合语句以扩展。要明确指出你想要一个Memory表,可使用ENGINE选项来指定:
关于MySQL集群与Memory引擎更多细节方面的比较,可以查看Scaling Web Services with MySQL Cluster: An Alternative to the MySQL Memory Storage Engine,该白皮书包括了这两种技术的机能研究,并一步步指导你如何将Memory用户迁移到MySQL集群。
如它们名字所指明的,Memory表被存储在内存中,且默认使用哈希索引。
能像会话(Session)或缓存(Caching)一样利便操纵和治理。
。
但愿部署内存引擎的开发者们会考虑MySQL Cluster是否是更好的选择,参考如下Memory引擎的使用场景及特点:
Memory 与 MySQL Cluster的比较
Memory存储引擎特性:
Memory存储引擎将表的数据存放在内存中。 Memory替换以前的Heap成为首选项,但同时向下兼容,Heap仍被支持。