node.js - 如何解析微服务世界中书籍的作者姓名?

标签 node.js amazon-web-services aws-lambda microservices

所以我开始了一段微服务之路。我在网上花了几个小时试图让自己沉浸在这个话题中。

我还不太了解的一个概念是不使用 SQL 连接,因此有一个小型独立数据库供作者使用,书籍也一样。

所以我理解以下SQL:

BooksTable - id, name, authorid
AuthorsTable - id, name

select book.name, author.name from book 
join author on book.authorId = author.id

在 Node.js 世界中

index.js

app.get('/api/books' bookDomain.get());

bookDomain.js

exports.get = () => {
  const books = bookService.get();

  const authors = authorService.get();

  /*
    This is where I'm lost: how do you achieve the simple SQL 
    above? I'm assuming in the domain is where this information is 
    "joined"? am I correct?
  */
};

服务

Database1
**bookService.js**
database context

Database2
**authorService.js**
database context

预期数据(有点像,基本上我是说 JSON 应该是返回类型)

[{
  book {
    "name": "Book 1",
    "author": "Author Name 1"
  }
},
{
  book {
    "name": "Book 2",
    "author": "Author Name 2"
  }
}]

最佳答案

我至少可以想到三种方法来解决这个问题。

  1. 文档模型 NoSQL DB: 考虑使用像 Mongo DB 这样的文档模型 NoSQL DB,而不是使用 SQL DB。因此,不是一个关系数据库,其中包含 BooksAuthors 之类的表以及一个 AuthorBooks 表,它们都连接在一对外键上 - 你可以使用像 Mongo 这样的文档 NoSQL DB,其中您的书籍以文档类型存储,采用 BSON 格式,看起来与您问题中的 JSON 几乎相同。像 Mongo 这样的文档数据库的一个很好的特性是,您可以在 Author 上的 Book 文档内的 JSON 上设置索引,从而缩短查询时间。这在 NoSQL Distilled 中有很好的讨论。作者:Martin Fowler(第 2.2 节和第 9 章)。
  2. 打破外键关系,以便由服务而不是数据库维护参照完整性: 而不是依赖关系数据库为您强制执行参照完整性(通过维护外键)将数据库的访问限制在您的微服务中,并通过您的服务本身维护外键的完整性。 Sam Newman 在 Building Microservices 中讨论了这种策略。第 84-85 页。
  3. 非规范化 DB: 与其为书籍和作者分别设置两个表,不如将它们组合成一个 denormalized table .因此,创建一个新表,其中您的书籍信息是重复的,并且作者信息对于每本书的每一行都是唯一的。它很丑。搜索现在有更大的搜索空间,但也很简单。例如,类似于以下格式:

    book_id | book_name              | book_author
    =====================================================
          1 | NoSQL Distilled        | Pramod J. Sadalage
    -----------------------------------------------------
          1 | NoSQL Distilled        | Martin Fowler
    -----------------------------------------------------
          2 | Building Microservices | Sam Newman

关于node.js - 如何解析微服务世界中书籍的作者姓名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51541318/

相关文章:

javascript - 如何从对象数组中读取属性值?

amazon-web-services - AWS API Gateway 如何终止 SSL?

amazon-web-services - 将用java编写的Azure函数迁移到AWS Lambda函数

javascript - Node js中游标和流的区别

node.js - 使用 PassportJS for Facebook 时如何区分登录和注册

mysql - AWS RDS 迁移

amazon-web-services - 使用asp.net core的无服务器模板的aws lambda函数

aws-lambda - 无服务器获取本地函数列表

Python boto3 过滤RDS标签

node.js - google-drive 无法获取推送通知