node.js - 如何解析微服务世界中书籍的作者姓名?
问题描述
所以我开始了一段微服务之路。我在网上花了几个小时试图让自己沉浸在这个话题中。
我还没有完全理解的一个概念是不使用 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"
}
}]
解决方案
我至少可以想到三种方法来解决这个问题。
- 文档模型 NoSQL DB:考虑使用像 Mongo DB 这样的文档模型 NoSQL DB,而不是使用 SQL DB。因此,您可以使用像 Mongo 这样的文档 NoSQL DB,将您的书籍存储为文档类型
Books
,Authors
采用AuthorBooks
BSON 格式,看起来几乎与您问题中的 JSON 相同。像 Mongo 这样的文档数据库的一个很好的特性是,您可以在Book
文档中的 JSON 上设置索引Author
,从而缩短查询时间。这在 Martin Fowler 的NoSQL Distilled(第 2.2 节和第 9 章)中得到了很好的讨论。 - 打破外键关系,以便由服务而不是数据库维护引用完整性:而不是依赖关系数据库为您强制执行引用完整性(通过维护外键)将数据库的访问限制为您的微服务和通过您的服务本身维护外键的完整性。Sam Newman 在第 84-85 页的Building Microservices中讨论了这种策略。
- 非规范化数据库:与其为书籍和作者分别设置两个表,不如将它们组合成一个非规范化表。因此,创建一个新表,其中您的书籍信息是重复的,并且作者信息对于每本书的每一行都是唯一的。它很丑。搜索现在有更大的搜索空间,但也很简单。例如,类似于以下格式:
book_id | book_name | book_author
=====================================================
1 | NoSQL Distilled | Pramod J. Sadalage
-----------------------------------------------------
1 | NoSQL Distilled | Martin Fowler
-----------------------------------------------------
2 | Building Microservices | Sam Newman
推荐阅读
- javascript - 如何在javascript中将远程图像转换为base64
- c# - CreateErrorResponse is losing text
- r - Problem with Goodness-Of-Fit tests for objects of class kppm in spatstat version 1.61-0
- c# - 如何根据层次结构中的场景顺序对循环进行排序以 debug.log 游戏对象?
- r - 为什么在 x 和 y 轴列选择之间使用 ~ 而不是 R 文档中看到的 plot(x,y, xlab, ylab) 中的常规 plot(x,y )?
- flutter - instagram 的“heart-ing”背后的逻辑发布了流畅的 api 调用
- c++ - 生命游戏编程问题 C++
- sql-server - SQL Server Reporting Server 第一次连接速度慢
- java - 创建 URI 时出现非法语法错误
- r - 在 geom_bspline() 下填充区域?