如何从 SQL 转换为 NoSQL/MapReduce?

2024-01-06

我有使用关系数据库的背景,但最近开始涉足 CouchDB,并对一些非关系操作(在 SQL 中很简单)在 CouchDB 中并不是一流函数感到惊讶。

如果您花点时间将下面的每个 SQL 语句映射到其 MapReduce 等效项,我将不胜感激。

SELECT COUNT(*) FROM products WHERE price < 20.00;
SELECT category, SUM(price) FROM products GROUP BY category;
UPDATE products SET price = 19.99 WHERE price = 20.00;
DELETE FROM products WHERE expires_at <= NOW();

The SELECT命令非常简单。批量写入有点复杂。一般来说,您将使用一些视图来检索需要更改的文档,然后您将使用_bulk_docs http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API用于一次发送所有更改的 API。

另外,请咨询有关视图的文档 http://wiki.apache.org/couchdb/HTTP_view_API有关如何发出查询的详细信息。这包括排序、分组等。


SELECT COUNT(*) FROM products WHERE price < 20.00;

Map

function (doc) {
  if (doc.price < 20) {
    emit(doc.price);
  }
}

Reduce

_count

如果您需要使用任意数量(而不仅仅是 20),那么您需要在所有情况下发出价格,并使用startkey and endkey缩小结果集范围。


SELECT category, SUM(price) FROM products GROUP BY category;

Map

function (doc) {
  emit(doc.category, doc.price);
}

Reduce

_sum

该地图函数本质上使用类别作为键,价格作为键/值对中的值。减少功能会将每个不同键的价格相加。


UPDATE products SET price = 19.99 WHERE price = 20.00;

Map

function (doc) {
  if (doc.price == 20) {
    emit(doc.price);
  }
}

一旦您的应用程序提取该视图的内容,您将在应用程序代码中执行所有操作,然后通过以下方式将结果发送回数据库:_bulk_docs API.


DELETE FROM products WHERE expires_at <= NOW();

Map

function (doc) {
  emit(doc.expires_at);
}

根据您存储日期时间值的方式,您可能需要调整地图功能以及对视图的查询。使用时间戳(JS 使用毫秒而不是秒)可能是实现此目的的最快方法。设置查询后,您将向每个文档添加一个新字段。_deleted: true。一旦您将此列表发送回数据库(再次使用_bulk_docs) 所有指定的文档将被删除。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 SQL 转换为 NoSQL/MapReduce? 的相关文章

  • WHERE NOT EXIST 附近的语法错误

    我在堆栈中搜索 但没有一个达到最终答案 我的查询是这样的 INSERT INTO user username frequence autoSend VALUES feri2 3 1 WHERE NOT EXISTS SELECT FROM
  • Oracle:按月分区表

    我的解决方案 德语几个月 PARTITION BY LIST to char GEBURTSDATUM Month PARTITION p1 VALUES JANUAR PARTITION p2 VALUES Februar PARTITI
  • SQL 标准是否允许函数名和括号之间有空格

    检查一些 RDBMS 我发现类似的事情 SELECT COUNT a SUM b FROM TABLE 允许 注意聚合函数和括号之间的空格 谁能提供一个指向 SQL 标准本身定义的指针 任何版本都可以 编辑 以上在postgres中工作 m
  • postgresql 不同的不工作

    我使用以下代码从数据库获取值 但是当我编写这段代码时 测试看看问题出在哪里 我注意到查询没有从数据库中获取不同的值 这是查询 select distinct ca id as id acc name as accName pIsu name
  • 插入具有只读主键列的表

    我正在使用一个使用 sql server 数据库的应用程序 我试图在表中插入一行 如下所示 该表有一个主键 prodNum 这是自动生成的密钥 当我尝试向表中插入一行时 如下所示 在行中intResult oSglProdTableAdap
  • 处理与不同相关实体的一对多的正确模式

    我有一个 C 项目 我使用实体框架作为 ORM 我有一个User 可以向多家银行付款 每家银行都是一个独立的实体 并且每家银行都由不同的字段描述 问题是 一User可以没有或有很多不同的Banks 我不太确定如何对此进行建模 临时解决方案是
  • 如何使用Java获取特定模式的所有表及其列?

    我有一个数据库架构 其名称为 Navid 这个模式中有很多表 当然每个表都有一些列 我需要的是一个java类 连接到我的数据库 有一个在所有表上循环的方法 2 1 有一个内部循环来定义表的所有列 制作创建表查询语句 我想在另一个数据库中创建
  • 将数据库与 Clojure 结合使用

    有哪些使用 Clojure 数据库的方法 我从 Clojure 知道你可以用 Java 做任何事情 但这意味着我最终可能会使用一些过于复杂的东西 比如 Hibernate 这与 Clojure 的简单性相冲突 有什么建议或意见吗 Cloju
  • 如何使用一个命令删除 SQL 数据库中的所有索引?

    那么 如何通过一条命令删除 SQL 数据库中的所有索引呢 我有这个命令可以获取所有 20 个左右的 drop 语句 但是如何从这个 结果集 运行所有这些 drop 语句呢 select from vw drop idnex 给我相同列表的另
  • 无法与重定向器建立连接。确保“sql browser”服务正在运行

    所以我尝试这个 sql server 2012 由于这个错误我无法打开任何 ssis 包 无法与重定向器建立连接 确保 sql browser 服务正在运行 我的 Sql 浏览器肯定正在运行 我尝试在本地服务 本地系统和网络下更改它 仍然没
  • SQL Server 中离线索引重建和在线索引重建有什么区别?

    重建索引时 有一个选项ONLINE OFF and ONLINE ON 我知道当ONLINE模式打开时 它会复制索引 切换新查询以利用它 然后重建原始索引 使用版本控制跟踪两者的更改 如果我错了 请纠正我 但是 SQL 在离线模式下会做什么
  • 针对约 225 万行的单表选择查询的优化技术?

    我有一个在 InnoDB 引擎上运行的 MySQL 表 名为squares大约有 2 250 000 行 表结构如下 squares square id int 7 unsigned NOT NULL ref coord lat doubl
  • SQLite 仅当值不为空时更新列

    Query UPDATE item table SET field1 field1 spanish field2 field2 spanish 问题 我怎样才能更新field1 with field1 spanish ONLY if fie
  • 如何修复 pgbackups 错误:备份 url 无效?

    我正在尝试按照迁移到 Cedar 的说明进行操作 除了我进行了重大重写 因此这不是前一个应用程序的分支 而是一个单独的分支 并停留在数据库迁移步骤 我安装了 pgbackup 和 heroku postgresql 插件 但得到了这个结果
  • 多边形内的 SQL 地理点在 STIntersect 上不返回 true(但使用 Geometry 返回 true)

    我不想仅仅为了在 STIntersect 中返回 true 而将地理数据转换为几何图形 下面是 SQL 中的代码 DECLARE point GEOGRAPHY GEOGRAPHY Point 1 1 4326 DECLARE polygo
  • SQL查询json字典数据

    我的表中的 CLOB 字段包含 JSON 如下所示 a value1 b value2 c value3 我正在尝试编写一个 SQL 查询来返回一个包含键和值字段的表 如下所示 key value a value1 b value2 c v
  • pg_restore错误:角色XXX不存在

    尝试将数据库从一个系统复制到另一个系统 涉及的版本是9 5 0 源 和9 5 2 目标 源数据库名称是foodb与主人pgdba并且目标数据库名称将被命名foodb dev与主人pgdev 所有命令都在将托管副本的目标系统上运行 The p
  • 重用 t-sql 游标的起始位置?

    我正在开发一个在临时表上使用游标的存储过程 我已经阅读了一些关于为什么不需要游标的内容 但在这种情况下我相信我仍然需要使用游标 在我的过程中 我需要遍历表的行两次 声明游标后 已经单步执行临时表并关闭游标 重新打开时游标的位置是否仍保留在表
  • SQL Server:如果存在会大大减慢查询速度

    正在使用SQL Server 2012 我找到了一些关于查询优化的主题 并将 EXISTS 与 COUNT 进行比较 但我找不到这个确切的问题 我有一个看起来像这样的查询 select from tblAccount as acc join
  • Oracle REGEXP_INSTR() 和“a-z”字符范围与预期不匹配

    我想用REGEXP INSTR 在 oracle 数据库中检查小写 大写字符 我知道 upper and lower POSIX 字符类 但我选择了a z这给了我非常奇怪的结果 我不明白 有人可以解释一下吗 SELECT REGEXP IN

随机推荐

  • “不变”属性是抽象定义的一部分吗?

    作为我学习的一部分 我认为我发现的抽象定义的最佳答案 有意义 来自 stackoverflow 什么是抽象 https stackoverflow com questions 7028242 what is abstraction 除此之外
  • 如何用ReentrantLock加锁?

    我希望以下测试仅打印 已锁定 一次 但它最终会打印该行 public class LocKTest Test public void testLock Lock lock new ReentrantLock while true if lo
  • Python 2.6 JSON解码性能

    我正在使用jsonPython 2 6 中的模块用于加载和解码 JSON 文件 然而 我目前的表现比预期的要慢 我正在使用一个大小为 6MB 的测试用例json loads 需要 20 秒 我以为json模块有一些本机代码来加速解码吗 我如
  • 你可以在 Laravel 中扩展 Command 类吗

    我目前正在开发一个使用 Laravel 4 的应用程序 我正在构建一个评论系统 并拥有用于创建 更新 删除的基本命令 接下来我要做的是为评论将附加到的特定对象 例如博客文章 创建命令 所以如果我的命令文件被调用CreateCommentCo
  • 即使 JSON feed 正确,fullCalendar 事件也不会显示

    与其他人一样 我在将 JSON feed 事件呈现在日历中时遇到问题 问题通常是错误的 JSON 格式 但事实并非如此 因为我已经使用 JSONlint 对其进行了验证 并在 Site Master 中对 JSON 提要进行了硬编码 并得到
  • OOP 有什么规则吗?

    最近听说OOP Java 有9条规则 我只知道四种 抽象 多态 继承和封装 OOP 还有更多规则吗 似乎您正在寻找的是面向对象设计的原则 http www butunclebob com ArticleS UncleBob Principl
  • 在 xml 中自动生成 JUnit 结果的最佳方法是什么?

    我目前正在 JUnit 中编写一系列测试 我需要将结果自动导出为 XML 我读到 执行此操作的最佳方法是扩展 RunListener 类并以这种方式编写 XML 下面是我迄今为止所做的示例 但我正在努力解决如何提取已运行的每个测试的信息 D
  • 将条件面板与 checkboxGroupInput 中的值结合使用

    我想使用 checkboxGroupInput 然后 如果选中某个框 我想要一个条件面板 一个玩具示例在这里 shinyUI fluidPage sidebarLayout sidebarPanel checkboxGroupInput i
  • 互信息,Kullback Leibler 两个彩色图像之间的散度

    我正在研究一个使用互信息进行图像分类的项目 它要求我使用彩色图像的概率分布 要么我想计算Matlab中的互信息或Kullback Leibler散度 谁能帮我解决这个问题吗 我将彩色图像的熵计算为 I imread s1 png rgb c
  • 如何在hive中使用order by和collect_set()操作

    在表 1 中 我有 customer id item id 和 item rank 根据某些销售额的项目排名 我想收集每个 customer id 的项目列表 并根据 item rank 排列它们 Customer id item id r
  • 如何将输入类型日期的默认值设置为今天?

    给定一个输入元素
  • Cypress 装置 - 无法读取未定义的属性(读取“数据”)

    我正在尝试使用固定装置来保存不同测试的数据 特别是用户凭据 这是代码的示例 当进行第二次测试时 我得到了 Cannot read properties of undefined reading data 有什么想法以及如何解决这个问题吗 这
  • PHP 删除点和连字符

    您好 我需要从变量时间和日期中删除点和连字符 这是我的代码 todaydate date Y m d n time utc mktime date G date i date s NowisTime date G i s time utc
  • Supervisorctl 不使用 Sqs 我得到了错误

    安装并配置后supervisor我有一些工作正在排队LaravelWeb应用程序 我的服务器操作系统是centOs运行后supervisor我收到这个错误 Symfony Component Debug Exception FatalThr
  • 不区分大小写 preg_replace_callback

    在下面的函数中 我想匹配关键字不区分大小写 应匹配 蓝色瑜伽垫 和 蓝色瑜伽垫 但是 目前仅当关键字大小写相同时才匹配 mykeyword 蓝色瑜伽垫 post gt post content preg replace callback b
  • 释放模式下不显示菜单

    我希望我为测试条目创建的菜单应该处于调试模式 但是当我发布 启动 我的应用程序时 不应为测试条目显示菜单 有人可以帮助我吗 检查IS DEBUG MODE在您的应用程序中标记并在其中添加代码 Use PackageManager得到一个Ap
  • 如何去掉不必要的括号?

    Same as this https stackoverflow com questions 10999835 regular expression to remove multiple parenthesis但是JavaScript 几个
  • 将外部 JavaScript(来自 CDN)捆绑到 React 组件中

    有哪些选项可以将外部 javascript sdk 捆绑到 React 组件中 我尝试在index html中包含javascript并通过window xyz引用它 它运行良好 但我无法进行生产构建 因为 javascript 不是以这种
  • C# 中的 JSON-RPC 客户端示例代码

    我需要一个简单的 C JSON RPC 1 0 客户端 最好使用 NET 2 0 或更高版本 我查看了 JRock 0 9 他们有几个示例 包括 Yahoo reader 但示例演示的是 JSON 而不是 JSON RPC 我知道我可以使用
  • 如何从 SQL 转换为 NoSQL/MapReduce?

    我有使用关系数据库的背景 但最近开始涉足 CouchDB 并对一些非关系操作 在 SQL 中很简单 在 CouchDB 中并不是一流函数感到惊讶 如果您花点时间将下面的每个 SQL 语句映射到其 MapReduce 等效项 我将不胜感激 S