This is part 3 of our series. Inpart 1we talked about
boosting performance with memcached on top of MySQL, inPart 2we talked about running
100% outside the data with memcached, and now in Part 3 we are going to look at a possible solution to free you from the database. The solution I am going to discuss here is Tokyo Cabinet and Tyrant.
I am not going to give you a primer or Tutorial on Tyrant and Cabinet, there are plenty of these out there already. Instead I want to see what sort of performance we can see compared to MySQL and Memcached, and later on other NoSQL solutions.Â
Tokyo actually allows you to use several types of databases that are supported, there are hash databases which are very similar to memcached, a table database which is similar to your classic database tables where you can add a where clause and search individual
columns, and a ton more “database options” beyond just those two. Again my goal is to not make this a Tokyo Tyrant tutorial but rather show one potential role it can play.
More details can be read about here:
http://1978th.net/tokyotyrant/
http://1978th.net/tokyocabinet/
So if we can get performance similar to memcached with Tokoyo Tyrant when using disk based hash tables it would be a compelling replacement for our application here. It should provide the interface and the same access we saw in memcached but with
disk persistence. So let’s look at the numbers:
Tyrant’s disk based hash was almost 2x faster then combining memcached and MySQL, and about 20% slower then the all memory memcached approach. So for this particular application I would have been much better off not storing my data in MySQL and
instead looking outside the database for an answer. Now sure there are other reasons you may want to keep data in the database… but I am trying to get you to think about your application and if those reasons are really valid. Helping clients pick the right
solution is one of the things we do here at Percona. If an application requires a database great, but if there is a better solution we want to suggest it. It’s our goal to make your application perform optimally.
Finally, one concern you have to have is the scalability of your storage solution. As load, number of threads, and data size increases how does performance differ or change? One knock on Tokyo -vs- Memcached is Tokyo is not distributed by default.Â
Now that’s not to say we could not shard it based on a hash, or even build an api with the capability built in ( or use the memcached clients which works! )… but native support is lacking. It does support replication which could make some rather interesting
architectures in the future.
So lets look at some scalability benchmarks, my server resources are rather limited but I thought I should try throwing more threads and work at the server until it hit its limit and fell over dead. It’s interesting to see the number of transactions
that occur with a given number of threads. let’s look at some of these:
As expected the smaller buffer pool struggled ( why a smaller buffer pool? This simulates a much larger data set. A BP of 256M with 1GB of data, can give similar performance to 20GB of data and a 5GB BP ). So with 256M BP and 4GB of memcached
we were well off the numbers we hit with a 4GB BP+4Gb of memcached ( which is expected ).  Adding more threads even up to 128 threads increased overall throughput but my load average on the server hit 40 and my CPU was pegged. At 128 threads I was pegging
out my CPU across the board. Also interesting is I started to hit bottlenecks in MySQL/Innodb when I had enough memory but I increased the threads from 64 to 128. As time permits I should revisit this and look at increased datasets, and look for area’s
where Tyrant may stumble a bit.
Bottom line given a specific application and data pattern sometimes a relational database is not the appropriate place for storing data. A tool like Tokyo Tyrant may not be for everyone or every application, but neither is a relational database.Â
Before building your next application try and understand whether an RDBMS is really needed or not.
How did I do these tests:
The above number were run with 32 Threads, Tyrant was started with 8 threads and 128M of memory, memached was started with 16 threads ( 1.4 memcached ), mysql was 5.1 XtraDB. Each environment had 2 tables each with 2 million rows. The data
was identical. memcached and Tyrant stored a comma delimited string to represent the row.ÂÂ Mysql was running with 256M allocated to the innodb buffer unless otherwise noted.
What’s next? Well next I am going to try and continue this series by exploring and benchmarking other NOSQL options and comparing them to database based solutions. I think showing the performance of a couple of different Tokyo database formats
would also be interesting. What other solutions are people interested in? I know I have gotten a lot of requests for cassandra #’s, but what else? Drop a comment and let me know!
分享到:
相关推荐
安装php-memcached扩展 https://github.com/php-memcached-dev/php-memcached tar -zxvf ...-disable-memcached-sasl && make && make install
python-memcached python-memcached
java-memcached-2.6.6.jar
ssm3-mybatis2-memcached 使用了 simple-spring-memcached 。因为 mybatis-memcached 不支持 MyBatis2(iBatis),只能用在 MyBatis3 里。但是因为有的项目还跑在 MyBatis2 版本上,所以也做一个例子。 mm-mybatis3-...
这个包是最高版本了,google code是1.22,但是这个版本是基础班的1.5版本.是github上源代码经过我打包出来的jar
高级分布式数据库教程,nosql,mongodb,redis。非常好的分布式教程!
cas-client-support-distributed-memcached-3.2.0.jar
hibernate-memcached-1.1.0-sources.zip
在JAVA中使用Memcached进行行缓存是比较复杂的。Simple-Spring-Memcachd(SSM)企图通过实现几个基础的使用项来简化Memcached的使用。 该项在java-memcached客户端的基础上使用java5的注解和Sping/AspectJ的AOP,使...
hibernate-memcached-1.1.0.jar
Nagios-Plugins-Memcached-0.02.tar.gz
python-memcached-latest.tar
用于hibernate集成memcached作为二级缓存所需要的包,1.2.2版本
simple-spring-memcached是与mamcached与spring结合,实现注解的方式缓存。 这是java所需要的jar,版本为3.3.0
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
资源分类:Python库 所属语言:Python 资源全名:python-binary-memcached-0.24.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
php-memcached-demo.tar.gz为memcache缓存服务器的软件包
hibernate-memcached, 在Hibernate中,使用Memcached作为第二级分布式缓存的库 休眠 memcachedHibernate中使用Memcached作为第二级分布式缓存的库。基于优秀的spymemcached客户端包含对 Whalin ( danga ) memcached...
本lib包包含:javolution-5.5.1.jar、kryo-1.03.jar、kryo-serializers-0.10.jar、memcached-2.5.jar、memcached-session-manager-1.5.1.jar、memcached-session-manager-tc7-1.5.1.jar、minlog-1.2.jar、msm-...
memcached python-memcached