Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nosql 有人能解释一下伏地魔项目或类似的键值存储是有用的吗?_Nosql_Key Value_Voldemort - Fatal编程技术网

Nosql 有人能解释一下伏地魔项目或类似的键值存储是有用的吗?

Nosql 有人能解释一下伏地魔项目或类似的键值存储是有用的吗?,nosql,key-value,voldemort,Nosql,Key Value,Voldemort,我可以看到自己正在使用缓存来自传统RDBMS查询的结果。但在这种情况下,它与其他(Java)缓存系统(如EhcacheJCache等)相比几乎没有什么优势 我还能在哪里使用Project Voldermort或类似的键值存储?您是如何在业务应用程序中使用此功能的?伏地魔项目是这一运动的一部分。计算机体系结构的发展趋势将数据库推向一个需要水平可伸缩性的方向。NOSQL试图解决这一需求 这种键/值存储所声称的好处之一是能够在不需要传统RDBMS的开销的情况下浏览大量数据 提高数据库速度的一种方法是反

我可以看到自己正在使用缓存来自传统RDBMS查询的结果。但在这种情况下,它与其他(Java)缓存系统(如EhcacheJCache等)相比几乎没有什么优势


我还能在哪里使用Project Voldermort或类似的键值存储?您是如何在业务应用程序中使用此功能的?

伏地魔项目是这一运动的一部分。计算机体系结构的发展趋势将数据库推向一个需要水平可伸缩性的方向。NOSQL试图解决这一需求

这种键/值存储所声称的好处之一是能够在不需要传统RDBMS的开销的情况下浏览大量数据


提高数据库速度的一种方法是反规范化。以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`;
这将改善查询的某些性能特征:

  • 因为您想要的结果已经在表中,所以不必执行读取端计算。e、 g.如果您想查看具有给定角色的用户数量,您需要一个
    分组依据
    计数
    。如果它是非规范化的,您将把它存储在另一个表中,该表专门用于保存角色和拥有该角色的用户数
  • 您想要的数据在同一个地方,希望在磁盘上的同一个地方。您可以进行一到几次顺序读取,而不需要多次随机搜索
  • NoSQL DBs针对这些情况进行了高度优化,在这些情况下,您希望访问一个基本上是静态的顺序数据集。此时,它只是将字节从磁盘移动到网络。更少的工作量,更少的开销,更快的速度。尽管这听起来很简单,但可以对数据和应用程序进行建模,使其感觉自然

    这种性能的权衡是写负载、磁盘空间和一些应用程序的复杂性。数据的非规范化意味着更多的拷贝,这意味着更多的磁盘空间和写负载。基本上,每个查询有一个数据集。由于您将这些计算的负担转移到了写入时间而不是读取时间,因此您确实需要某种异步机制来实现这一点,从而增加了应用程序的复杂性

    因为您必须存储更多的副本,所以您必须执行更多的写入。这就是为什么不能用SQL数据库复制这种体系结构的原因——扩展写操作非常困难


    根据我的经验,对于大型应用程序来说,这种权衡是非常值得的。如果您想在几个月前了解更多有关Cassandra的实际应用,您可能会发现它很有用。

    我知道这是一项很酷的技术。我想知道普通企业是如何使用它的。所谓正常业务,我指的是使用传统关系数据库的非谷歌和非facebook类型的公司。我正在寻找人们将此技术用于“正常”业务的用例或场景