如何选择各种类型数据库?- Raj


生活在“数据时代”,您是否在为您的应用程序选择正确的数据库/数据存储方面遇到过困惑。那么,你并不孤单 :-)。虽然“被有选择性宠坏了”是件好事,但这恰恰使选择数以万计的不同数据库/数据存储选项变得更加困难!
在经历了多次失败和在此过程中吸取的教训之后,以下是一些需要考虑的重要因素:

  • 了解您的需求:这是您必须花费大部分时间的地方。谨慎地列出所有特定用例和需求的详细列表。如果它是您希望现代化的现有应用程序(例如从本地迁移到 SaaS),您还需要考虑当前本地数据库实例可能已经面临的问题。
  • 不要受“炒作”或“新”的影响:很容易被最新最热门的数据库或数据存储所左右。重要的是不要让这影响您的决定。
  • 商业/技术。支持:会出现问题,虽然社区支持很大,但在出现危机情况时,获得商业支持并保证 SLA 对重新确保首选支持团队大有帮助。
  • 多云支持:越来越多的应用程序被期望能够在私有/混合/公共云选项之间切换/迁移。如果您可能必须从一个公共云平台切换到另一个公共云平台,请了解长期愿景并考虑未来的可能性。在这种情况下,在大多数平台上广泛支持数据存储确实有帮助。
  • 订阅/许可条款和成本:这也是一个需要考虑的重要因素
  • 流行度:如果您特别想挑选一个“新来的孩子”,那么围绕DB-Engines 的行业接受度/流行度进行一些研究可能很重要。这绝对可以帮助您更好地比较选项。

下面是一个“过度简化”的数据库/数据存储类型列表以及您可以利用它们的地方:
  • 键值数据库:极快的响应。与其他持久性数据库一起用作缓存。(Memcached、Redis、Azure 缓存、AWS 弹性缓存、GCP MemoryStore)
  • 宽列/列式数据库:键是一系列宽列。去中心化,可以横向扩展。适合频繁写入但不频繁读取/更新。适合用于不断增加的流动数据写入。(Cassandra、HBase、GCP Cloud BigTable)
  • TimeSeries DB:适合顺序写入但不频繁读取/更新(Influx DB、Open TSDB)
  • 文档存储:键值对,可以组织为关系/层次结构。阅读真的很快,写作/更新更慢。最适合一般用途。查询有点接近关系数据库。(Mongo DB、Couch DB、Azure Cosmos DB、AWS Dynamo DB、GCP Cloud BigTable)
  • 对象/Blob 存储:最适合存储视频、文件。通常与 CDN 一起设置以确保您可以复制并启用从最近的副本进行访问。(Azure Blobstore、AWS S3、GCP CloudStorage)
  • 关系数据库:传统结构化数据的最佳选择。需要一个架构,保证预先确定结构Schema。事务 SLA 保证。但是水平扩展可能很麻烦(My SQL、Oracle、DB2、Informix、PostGres、Azure SQL、AWS RDS、GCP Cloud SQL)
  • Graph DB:知识图构建(neo4J、DGraph、Azure Neo4j、AWS Neptune、GCP Cloud BigTable)
  • 搜索:搜索文本、内容。就像在亚马逊/Netflix 上搜索文本/内容一样。这些不是主要数据库,必须将数据引入其中才能启用文本搜索。(Lucene、Elastic、SolR、melli 搜索)
  • 数据仓库:整合数据以对所有交易进行分析。这些不适合交易,更适合离线分析。(Hadoop、Snowflake、Azure Synapse、AWS RedShift、GCP BigQuery)
  • 多模型:这是一种独特的数据库/数据存储库,可满足上述模型中的一种以上。如:Apache Druid 是一个 Relational+Columnar+TimeSeries DB。Fauna 是一个文档存储+关系+图形+时间序列数据库