nosql – 任何人都可以解释Project Voldermort或类似的键值存储
我可以看到自己使用
Project Voldermort来缓存传统RDBMS查询的结果.但在这种情况下,它提供的优势几乎没有其他(Java)缓存系统,如EHcache Jcache等.
我还能在哪里使用Project Voldermort或类似的Key Value商店?您是如何在业务应用程序中使用它的? 解决方法
提高数据库速度的一种方法是非规范化.以MySQL为例:
CREATE TABLE `users` ( `user_id` INT NOT NULL AUTO_INCREMENT,… -- Additional user data PRIMARY KEY (`user_id`) ); CREATE TABLE `roles` ( `role_id` INT NOT NULL AUTO_INCREMENT,`name` VARCHAR(64),PRIMARY KEY (`role_id`) ); CREATE TABLE `users_roles` ( `user_id` INT NOT NULL,`role_id` INT NOT NULL,PRIMARY KEY (`user_id`,`role_id`) ); 整洁,整洁,正常化.但是,如果您想获取用户及其角色,则查询很复杂: SELECT u.*,r.* FROM `users` u LEFT JOIN `user_roles` ur ON u.`user_id` = ur.`user_id` JOIN `roles` r ON ur.`role_id` = r.`role_id`; 如果你对它进行非规范化,它可能看起来像: CREATE TABLE `users` ( `user_id` INT NOT NULL AUTO_INCREMENT,`role` VARCHAR(64),… -- Additional user data PRIMARY KEY (`user_id`) ); 等效的查询将是: SELECT * FROM `users`; 这改善了查询的一些性能特征: >因为您想要的结果已经在表中,所以您不必执行读取侧计算.例如如果您想查看具有给定角色的用户数,则需要GROUP BY和COUNT.如果它是非规范化的,您可以将其存储在另一个表中,该表用于保存角色和具有该角色的用户数. NoSQL DB针对这些情况进行了高度优化,您可以在这些情况下访问大多数静态的顺序数据集.那时,它只是将字节从磁盘移动到网络.减少工作量,减少开销,提高速度.尽管听起来很简单,但可以对数据和应用程序进行建模,因此感觉很自然. 这种性能的折衷是写入负载,磁盘空间和一些应用程序复杂性.对数据进行非规范化意味着更多的副本,这意味着更多的磁盘空间和写入负载.实际上,每个查询都有一个数据集.因为您将这些计算的负担转移到写入时间而不是读取时间,所以您确实需要某种异步机制来实现这一点,因此一些应用程序的复杂性. 而且因为你必须存储更多的副本,你必须执行更多的写入.这就是为什么你不能用SQL数据库实际复制这种架构的原因 – 扩展写入非常困难. 根据我的经验,这种权衡对于大规模应用来说是非常值得的.如果您想在几个月前阅读更多关于Cassandra,I wrote this piece的实际应用,您可能会发现它有用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |