本文转载自公众号“阅读术”(ID:AI_Discovery)从事新项目总是无比激动——你可以按照自己喜欢的方式自由设计和构建项目。但如果规划不合理,以后就会惹来麻烦。选择APP数据库是最关键的决定之一,本文的目的是介绍数据库选项,并列出它们的优缺点,以帮助您明智地选择数据库。键值数据库的结构类似于JSON对象,其中每个键都是唯一的,并且每个键都指向某个值。它将数据保存在内存中,运行速度快,但有容量限制,难以存储大量数据。由于没有使用硬盘,所以运行速度非常快。因为不涉及查询或连接,所以您无需担心数据建模。由于没有架构,开发人员始终可以根据自己的喜好灵活地更改数据。使用条件:该技术主要用作缓存机制,当数据的某些部分被频繁获取和观察时。所以一般会结合其他数据库使用key-value技术作为缓存机制。宽列宽列就像类固醇的键值注入。值被修改为存储一组列,而不仅仅是普通数据。随着一组列的引入,现在可以对相关数据进行分组,但仍然没有标准架构。因此,每个键都可以指向不同的一组数据。由于它没有模式,它可以处理非结构化数据,并带有一种称为CQL的查询语言,它类似于SQL,但功能要弱得多。数据源源不断,例如来自IoT设备、股票市场、金融交易或Netflix观看历史记录。使用条件:经常写不要经常更新或阅读还是不通用。因此,它可用于存储来自所有不同应用程序的历史数据。文档数据库是我们使用最多的数据库技术之一。很明显,它包括文档,每个文档都是一组键值对。它们是非结构化的,不需要架构。文档被分组到集合中,这些集合可以被构造成逻辑层次结构。逻辑数据集以更合乎逻辑的方式对相关数据进行分组,看起来类似于关系数据库。数据库无法运行连接查询,那么如何一次获取所有相关数据呢?将它们全部存储起来。鼓励非规范化数据库,为数据重复/不一致做好准备。读取数据很快,但是在保持一致性的同时写入和更新数据可能是一个挑战。文档数据库非常适合通用应用程序,可能还有大多数应用程序、游戏和物联网。如果您不太了解数据库模式,那么记录数据库是最好的开始方式。流行的文档型数据库的数据量很大,当数据之间存在直接或间接的关系时,文档型数据库无法容纳。在这种情况下,必须运行多个复杂查询,然后在前端应用程序中组合所有接收到的数据,或者可以使用关系数据库,其中这些复杂查询由数据库管理。关系数据库此类数据库的一些著名示例包括MySQL、Postgres和SQLServer。它们已经存在了很长时间,并且是许多应用程序的不错选择。想象一家汽车工厂,它有不同的轮子来生产汽车零件。假设门是在一个地方制造的,而车轮、车身和内部零件都是在不同的地方制造的。假设的汽车工厂蓝图对每个制造零件都有一个唯一的ID。所以一旦汽车组装好,所有的零件都从不同的地方拿来组装汽车。建设这样的工厂需要绘制蓝图,以确保整个生产过程非常高效和优化。当在数据库中使用时,此蓝图称为模式。因此,需要为数据库规划好schema,保证数据库也是高效的,能够满足应用程序的数据需求。缺点:随着时间的推移,改变汽车站的布局就像改变要求一样,会耗费汽车公司的时间和金钱。大型应用程序面临类似的情况。确保使用需求明确的关系数据库。还有,一旦你建了一个月产30辆的工厂,产量再提高到90辆就很难了。同理,关系型数据库也很难扩展,但也有例外,比如CockroachDB和PostgreSQL,它们的设计具有扩展能力。优点:SQL数据库符合ACID,这意味着即使读写操作可能会失败,数据的有效性和完整性也不会受到影响-使其成为银行/金融相关数据的理想选择。一旦有了模式,就可以确保存储的数据在模式中定义的一组验证之后始终存储在固定结构中。哪个最适合你?如果需求很明确,不需要大刀阔斧的改动,就选这个。如果您对自己的需求不是很确定并且处于某种实验阶段,那么最好使用NoSQL数据库。如果您不需要建立模式,您应该使用哪个模式将关系直接存储为数据?图数据库数据存储在节点中,关系定义为边。让我们一起看看如何做。要在SQL数据库中查找所有学习计算机科学的学生,您需要一个查找/中间人表,它单独存储所有学习计算机科学的学生的记录。图表更简单、更清晰,因为数据的关系部分不必单独存储,自动使用新样式数据。关系在图中更容易记录和维护通过这种直接显示两个节点之间关系的新方式,使复杂的连接查询变得更简单,并且与SQL相比大大提高了数据性能。因此,当依赖大量的join操作导致数据性能下降时,可以使用这种类型的数据库。可搜索的数据库如果您正在构建像Google这样的应用程序,在其中进行小字符串查询搜索时,您必须快速返回所有匹配的记录,那么这是一个全文搜索引擎。这些数据库基于1999年启动的ApacheLucene项目。Algolia和Meil??iSearch是全文搜索引擎。它们看起来类似于文档类型数据库。有一个索引并向其中添加数据对象。搜索数据库引擎将分析文档中的所有文本并创建称为倒排索引的东西。当你查询某些东西时,数据库只是检查倒排索引,这使得整个过程看起来非常快,即使对于大型数据库也是如此。有很多数据库可供选择,但最受欢迎的似乎是Fauna。作为应用程序开发人员,我们通常只关心JSON,我们可以在应用程序的前端使用它。使用Fauna,无需担心数据建模、架构、缩放、复制或规范化过程,只需获取JSON数据即可。使用GraphQL定义如何访问数据。以类instagramapp的场景为例。将使用JSON为用户、帖子和查询定义规则。我们刚刚上传了GraphQL模式,它会自动创建一个集合来存储数据和一个索引来查询它。在幕后,它将考虑如何根据您提供的GraphQL模式利用不同的范例,例如关系、图形和文档。只需像在文档数据库中一样添加数据,而不受数据建模的约束。优点:它符合ACID标准并且运行速度极快。不用担心基础设施。只需定义您的数据需求,云将处理其余部分。缺点:价格是一个明显的缺点。好东西不是免费的,但它们确实为想要学习的开发人员以及小型初创公司提供了慷慨的计划/开源选项。以下是需要注意的动物群的重要特征:这些还不是全部!有许多不同的数据库需要学习,但我希望这篇介绍能为您在设计应用程序时提供清晰的方向。
