首页 > 数据库 > MySQL > 正文

MySQL Memory 存储引擎浅析

2024-07-24 12:49:27
字体:
来源:转载
供稿:网友
后来看到博客园在用NorthScale Memcached Server(官方站点:http://www.couchbase.com/products-and-services/memcached),貌似共享收费,又犹豫了。其实项目里的需求很简单,也想自己用.Net Cache来实现,但稳定性难以评估,开发维护成本又似乎太大,没办法,My SQL Memory Storage成了唯一选择,因为几乎不怎么需要编写代码。

先看官方手册,然后写了个简单的性能测试。因为官方最新的文档都是英文版的,所以译了5.5版本 MySQL Memory Storage章节。

官方文档(译自5.5版本的The Memory Storage Engine)
Memory存储引擎将表的数据存放在内存中。Memory替代以前的Heap成为首选项,但同时向下兼容,Heap仍被支持。

Memory存储引擎特性:
Storage limitsRAMTransactionsNoLocking granularityTable
MVCCNoGeospatial data type supportNoGeospatial indexing supportNo
B-tree indexesYesHash indexesYesFull-text search indexesNo
Clustered indexesNoData cachesN/AIndex cachesN/A
Compressed dataNoEncrypted dataYesCluster database supportNo
Replication supportYesForeign key supportNoBackup / point-in-time recoverycYes
Query cache supportYesUpdate statistics for data dictionaryYes  
Memory 与 MySQL Cluster的比较

希望部署内存引擎的开发者们会考虑MySQL Cluster是否是更好的选择,参考如下Memory引擎的使用场景及特点:

能像会话(Session)或缓存(Caching)一样方便操作和管理。
充分发挥内存引擎的特点:高速度,低延迟。
只读或读为主的访问模式(不适合频繁写)。
但是内存表的性能受制于单线程的执行效率和写操作时的表锁开销,这就限制了内存表高负载时的扩展性,特别是混合写操作的并发处理。此外,内存表中的数据在服务器重启后会丢失。

MySQL Cluster(集群)支持与Memory引擎同样的功能并且提供更高的性能,同时拥有Memory不支持的更多其它功能:

行锁机制更好的支持多线程多用户并发。
更好的支持读写混合语句以及扩展。
可选择磁盘存储介质永久保存数据。
Shared-nothing和分布式架构保证无单点故障,99.999% 可用性。
数据自动分布在各个节点,应用开发者无需考虑分区或分片解决方案。
支持MEMORY中不支持的变长数据类型(包括BLOB 和 TEXT)。
关于MySQL集群与Memory引擎更多细节方面的比较,可以查看Scaling Web Services with MySQL Cluster: An Alternative to the MySQL Memory Storage Engine,该白皮书包括了这两种技术的性能研究,并一步步指导你如何将Memory用户迁移到MySQL集群。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表