在数据科学领域,数据库知识是不可或缺的。无论是在面试中被问及数据库相关问题,还是在数据科学家、数据分析师、商业分析师等角色中广泛使用数据库,或是在数据科学项目中依赖数据库知识来收集和整理数据,数据库都扮演着至关重要的角色。
正以前所未有的速度和规模产生数据。例如,每秒钟有超过8500条推文和900张照片上传到Instagram,这让人难以置信。现代数据库如何应对如此庞大的数据量?为了处理这些数据,需要一个分布式数据库系统,它能够运行多个节点并且具有分区容忍性。这意味着即使其中一个节点因任何原因宕机,系统也应该能够无缝工作。因此,分区容忍性是必须的。
根据CAP定理,不能同时拥有分区容忍性、可用性和一致性。必须在可用性和一致性之间进行权衡。例如,在银行应用中,客户无论从哪里访问都应看到正确的余额。结果可能会晚几秒钟,但它们应该是高度一致的。
NoSQL数据库,即非关系型数据库,它们以不同的方式存储数据之间的关系。可以将“NoSQL”理解为“不仅仅是SQL”。在这里,数据不会分割成多个表,而是允许所有以任何方式相关的数据都在一个数据结构中。当处理大量数据时,不需要担心查询NoSQL数据库时的性能延迟。不需要运行昂贵的连接!它们是高度可扩展和可靠的,并且设计为在分布式环境中工作。
接下来,将探索不同类型的NoSQL数据库。
文档型数据库将数据存储在JSON对象中。每个文档都有类似于键值对的结构。文档型数据库对开发者来说很容易,因为文档直接映射到对象,JSON是网络开发者常用的非常常见的数据格式。它们非常灵活,允许在任何时候修改结构。
文档型数据库的一些例子包括MongoDB、Orient DB和BaseX。
顾名思义,键值数据库将数据存储为键值对。在这里,键和值可以是任何东西,如字符串、整数甚至复杂对象。它们高度可分区,并且是水平扩展的最佳选择。它们在会话导向的应用中非常有用,试图捕获客户在特定会话中的行为。
一些例子包括DynamoDB、Redis和Aerospike。
这种数据库将数据存储在记录中,类似于任何关系数据库,但它能够存储大量的动态列。它将列逻辑地分组到列族中。
例如,在关系数据库中,有多个表,但在宽列数据库中,不是有多个表,而是有多个列族。
它们以节点和边的形式存储数据。数据库的节点部分存储有关主要实体的信息,如人、地点、产品等,而边部分存储它们之间的关系。当需要找出数据点之间的关系或模式时,这些数据库工作得最好,如社交网络、推荐引擎等。
一些例子包括Neo4j、Amazon Neptune等。
让看看一些NoSQL数据库及其特点。
MongoDB是最广泛使用的文档型数据库。它将文档存储在JSON对象中。根据网站stackshare.io,超过3400家公司在其技术栈中使用MongoDB。Uber、Google、eBay、Nokia、Coinbase等都是其中之一。
何时使用MongoDB?如果计划集成数百个不同的数据源,MongoDB的文档型模型将非常适合,因为它将提供数据的统一视图。
当应用程序预期会有很多读写操作,但不太关心一些数据在服务器崩溃时丢失时,可以使用它来存储点击流数据,并用于客户行为分析。
# 以下是一些MongoDB的Python教程链接
如果想要开始使用MongoDB,强烈推荐阅读以下文章:
何时使用Cassandra?当用例需要更多的写操作而不是读操作时,当需要更多的可用性而不是一致性时,例如,可以用它来为社交网络网站,但不能用于银行目的,需要的数据库查询中的连接和聚合较少时。
健康追踪器、天气数据、订单跟踪和时间序列数据是一些好的用例,可以在其中使用Cassandra数据库。
这也是一个开源的分布式NoSQL数据库系统。它高度可扩展和一致。也可以称之为分析引擎。它可以轻松分析、存储和搜索大量数据。
如果全文搜索是用例的一部分,ElasticSearch将是技术栈的最佳选择。它甚至允许模糊匹配搜索。
超过3000家公司在其技术栈中使用Elasticsearch,包括Slack、Udemy、Medium和Stackoverflow。
何时使用ElasticSearch?如果用例需要全文搜索,ElasticSearch将是最好的选择。如果用例涉及聊天机器人,这些机器人解决大部分查询,例如,当一个人输入某物时,拼写错误的可能性很高。可以利用ElasticSearch内置的模糊匹配实践。
此外,ElasticSearch在存储日志数据和分析它方面也很有用。
它是由Amazon创建的基于键值对的分布式数据库系统,并且高度可扩展。但不幸的是,它不是开源的。它可以轻松处理每天10万亿次请求,所以可以看到为什么!
超过700家公司在其技术栈中使用DynamoDB,包括Snapchat、Lyft和Samsung。