每种类型数据库的实际示例(实际案例)

时间:2013-08-13 00:46:52

标签: database nosql relational-database

有几种类型的数据库用于不同的目的,但通常MySQL用于一切,因为是最知名的数据库。仅举一个例子,在我的公司中,大数据的应用程序在初始阶段有一个MySQL数据库,这是令人难以置信的,并将给公司带来严重后果。为何选择MySQL?仅仅因为没有人知道应该如何(以及何时)使用另一个DBMS。

所以,我的问题不是供应商,而是数据库的类型。您是否可以为每种类型的数据库提供特定情况(或应用程序)的实际示例,强烈建议您使用它?

示例:

•由于Y,社交网络应使用X类型。

•MongoDB或沙发数据库不支持交易,因此文档数据库对银行或拍卖网站的应用程序不利。

等等......


关系: MySQLPostgreSQLSQLiteFirebirdMariaDBOracle DB,{{ 3}},SQL serverIBM DB2IBM Informix

对象: TeradataZODBDB4OEloqueraVersantObjectivity DB

图表数据库: VelocityDBAllegroGraphNeo4jOrientDBInfiniteGraphgraphbase,{ {3}},sparkledb

主要价值商店: flockdbBrightstarDBAmazon DynamoDBRedisRiakVoldemortFoundationDBleveldbBangDBKAIhamsterdbTarantoolMaxtableHyperDex

列系列: GenomuMemcachedbBig tableHbasehyper table

RDF商店: CassandraApache Accumulo

多模型数据库: Apache JenaSesamearangodbDatomicOrient DB

文档: FatDBAlchemyDBMongo DBCouch DBRethink DBRaven DB,{{ 3}},terrastoreJas DBRaptor DBdjon DB

XML数据库: EJDBdenso DBCouchbase

分层: BaseXSedna 感谢@Laurent Parenteau

2 个答案:

答案 0 :(得分:5)

由于普遍性,这个问题几乎无法回答。我认为你正在寻找一些简单的答案问题=解决方案。问题是每个“问题”在成为一个企业时变得越来越独特。

你称之为社交网络?推特? Facebook的? LinkedIn?堆栈溢出?它们都针对不同的部分使用不同的解决方案,并且可以存在使用多语言方法的许多解决方案。 Twitter有一个像概念的图形,但只有1度的连接,关注者和追随者。另一方面,LinkedIn在展示人们如何超越一级学位方面茁壮成长。这是两种不同的处理和数据需求,但两者都是“社交网络”。

如果你有一个“社交网络”但没有做任何发现机制,那么你很可能很容易使用任何基本的键值存储。如果您需要高性能,水平缩放,并且具有二级索引或全文搜索,则可以使用Couchbase

如果您在收集的日志数据之上进行机器学习,则可以将Hadoop与Hive或Pig或Spark / Shark集成。或者你可以做一个lambda架构,并使用许多不同的系统与Storm。

如果您通过超出二度顶点的查询等图形进行发现,并且还对边缘属性进行过滤,则可能会考虑在主要商店顶部使用图形数据库。但是,图形数据库不是会话存储或通用存储的好选择,因此您需要多语言解决方案才能有效。

数据速度是多少?规模?你想怎么管理它。您在公司或创业公司拥有哪些专业知识。这有很多原因,这不是一个简单的问答。

答案 1 :(得分:1)

特定于数据库选择的简短有用读物:How to choose a NoSQL Database?。我将在此答案中突出重点。

键值与面向文档

键值存储

如果您定义了清晰的数据结构,以使所有数据都只有一个键,请进行键值存储。就像您有一个很大的Hashtable,人们通常将其用于Cache存储或明显基于密钥的数据。但是,当您需要基于多个键查询相同的数据时,事情就会变得有些烦人了!

一些键值存储为:memcachedRedisAerospike

围绕键值存储设计数据模型的两个重要事项是:

  • 您需要事先了解所有用例,并且如果不重新设计就无法更改数据中的可查询字段。
  • 请记住,如果要在键值存储中的同一数据周围维护多个键,则对多个表/存储桶/集合/任何内容的更新都不是原子的。您需要自己处理。

面向文档

如果您只是远离RDBMS,并且希望以对象方式并尽可能接近表式结构来保存数据,那么文档结构是您的最佳选择!当您创建应用程序并且不想过早地处理RDBMS表设计(在原型设计阶段)并且架构可能随着时间而发生巨大变化时,该功能特别有用。但是请注意:

  • 二级索引的性能可能不佳。
  • 交易不可用。

面向文档的流行数据库是:MongoDBCouchbase

比较键值NoSQL数据库

内存缓存

  • 内存中缓存
  • 没有持久性
  • 支持TTL
  • 仅客户端群集(客户端在多个节点上存储值)。通过客户端可横向扩展。
  • 不适用于大尺寸值/文档

Redis

Aerospike

  • 内存中和磁盘上
  • 非常快(可以在单个节点上支持> 1百万TPS)
  • 可横向扩展。服务器端集群。分片和复制的数据
  • 自动故障转移
  • 支持Secondary indexes
  • CAS(安全的读-修改-写)操作,支持TTL
  • 企业级

比较面向文档的NoSQL数据库

MongoDB

  • 快速
  • 成熟稳定–功能丰富
  • 支持故障转移
  • 可横向扩展的读取-从副本/辅助读取
  • 除非使用mongo分片,否则无法水平缩放写入
  • 支持高级查询
  • 支持多个二级索引
  • 分片架构变得棘手,无法扩展到需要二级索引的程度。基本分片部署最少需要9个节点。
  • 如果您具有很高的写入率,则文档级锁是一个问题

Couchbase服务器

  • 快速
  • 共享群集而不是mongodb的主从
  • 热故障转移支持
  • 可水平扩展
  • 通过视图支持二级索引
  • 学习曲线大于MongoDB
  • 要求更快