用户设置服务数据库设计

时间:2019-07-15 14:36:55

标签: database database-design architecture microservices

我的任务是为用户设置服务构建新服务(又称微服务)。

此服务的目的是在系统中存储用户的设置。设置大多以带有user_id的键值对的形式出现。

此服务的某些功能要求:

  • 服务的设计应使其可扩展以进行读取。
  • 服务的设计应使其易于插入和扩展。假设我们将来希望在系统中引入更多类型的用户设置,那么只需花费很少的精力即可轻松实现。

目前,我正处于该服务的数据库设计和建模阶段,并且有一些我想问的问题:

  • 行业中是否有关于此类服务的良好实践/原则/示例?
  • 在这种情况下,关系(SQL)或非关系(NoSQL)数据库会更适合吗?我已经读过有关relational design的内容,我想知道NoSQL是否适合这种用例,因为大多数时候我们都在存储设置的键值对。
  • 还有其他我可以考虑的替代设计吗?
  • 假设NoSQL适合解决此问题,我应该选择哪个NoSQL数据库?我没有使用NoSQL的经验,市场上有很多数据库可供选择。

1 个答案:

答案 0 :(得分:0)

您的问题总体来说有点太笼统和模糊,但是我将根据您提供的信息并考虑到您提到的这是一个微服务,尝试解决该问题:

  • 首先,公司或计划中的其他公司是否正在使用其他微服务?我认为必须这样做,因为构建单个微服务没有意义。这样,我将检查其他服务正在使用什么,并选择一种兼容的技术(或者甚至是相同的,除非出于某种原因它确实很糟糕)

  • 对于您的描述,大多数DB都可以正常工作。存储用户设置不是一项特别繁重的任务,并且可能不会生成数十亿条记录。这样,请先查看该公司已经在使用的其他东西,然后检查您是否可以使用同一东西(除非他们使用的是古老的东西,在这种情况下,请查看是否还有其他计划使用不同数据库的项目)

  • NoSQL与SQL;对于像您这样的微服务,它实际上不会有任何改变。因此,请选择您喜欢的任何东西。对于关系型,我建议使用MariaDB或Postgres,对于NoSQL,建议使用MongoDB或ArangoDB。但这是个人喜好。网络上的每个人都会提出不同的建议。

  • 您是否考虑替代设计?微服务今天风行一时,所以您选择它是可以理解的。我认为这是一个很棒的体系结构,但是您应该知道,随着微服务数量的增加,要为其灵活性和可维护性付出一定的代价,那就是可追溯性。只要您充分了解它的优缺点,就没有真正的理由不使用它。我建议您阅读Microservices in Action以获得很好的介绍。