当前位置: 首页 > 科技观察

35NoSQL数据库应用场景

时间:2023-03-12 13:21:13 科技观察

你的应用应该用什么?  关键是要意识到不同的应用需要不同的数据模型和产品。选择正确的数据模型和产品。  要了解您的应用程序需要什么样的数据模型,您可以阅读您实际上使用NoSQL到底是为了什么?在本文中,我总结了一些具有不同特点的非常规使用场景。  适应您的需求和应用场景。反过来,您可以找到最适合您的架构的产品。NoSQL还是SQL都无关紧要。  综合考虑数据模型、产品特性和应用场景。不同的产品有不同的功能,单凭数据模型是无法决定选择谁的。  具备您最需要的功能的产品才是最好的。  如果你的应用有以下需求:  复杂的东西,如果你不能承受数据丢失的风险或者你想要一个简单的事务编程模型,你可以选择关系数据库和网格数据库。  示例:库存系统需要完整的ACID属性。如果我购买了一件商品却被告知已售罄,我会非常恼火。我不要补偿,我只想要我买的东西。  可扩展性,NoSQL或SQL均可,目标产品需支持水平扩展、分区、在线增删硬件、负载均衡、自动分片、数据均衡、容错等特性。  追求高可用,可以使用Bigtable等支持最终一致性的数据库。  需要应对长期快速读写,可以看看文档数据库,key-value数据库或者内存数据库,也可以考虑SSD。  要实现社交,最好的选择应该是图数据库。其次,像Riak这样支持关系的数据库也是可以的。支持简单SQL连接操作的内存关系数据库可以处理少量数据。Redis的设置和列表操作就是这样做的。  如果你的应用有以下需求:  需要不同的访问方式和数据类型看看文档数据库,他们在这方面非常灵活。  大数据离线分析首先要考虑Hadoop,其次是其他支持MapReduce的产品。当然,支持MapReduce并不等于擅长MapReduce处理。  如果需要跨越多个数据中心,可以选择基于Bigtable模型的产品,或者可以解决延迟问题和分区容错的分布式产品。  CRUD应用可以考虑文档数据库,这样就可以通过join访问复杂的数据结构。  搜索可以考虑Riak。  如果需要列表、集合、队列、发布订阅等数据结构,可以考虑Redis。它的分布式锁等特性也很有用。  编程友好,如果要使用JSON、HTTP、REST、Javascript等程序员喜欢的数据类型,最好的选择是文档数据库和key-value数据库。  如果你的应用有以下需求:  实时交易处理的物化视图,可以考虑VoltDB,非常适合快速处理大量交易。  企业级支持和服务级协议,你可以在市场上寻找以此为卖点的产品,比如Membase。  记录大量的连续数据,对一致性要求不是太高,可以看看Bigtable类型的数据库,因为它工作在分布式文件系统上,可以处理大规模的写请求。  需要尽可能简单易用,请考虑PAAS解决方案,您几乎不需要自己做任何事情。  如果你的产品要卖给企业客户,请考虑关系型数据库,因为他们习惯于关系型数据库。  动态建立对象之间的关系,对象的属性可以动态加减,可以考虑图数据库,因为它不需要schema,可以根据需要在代码中建模。  要支持大型视频文件,请查看像S3这样的存储服务。NoSQL不适合存储BLOBS,虽然MongoDB也提供文件服务。  如果您的应用有以下需求:  快速批量上传大量数据,您必须找到支持该场景的产品。但大多数产品不支持批量操作。  容易改变,应该选择支持动态模式的文档数据库和Key-value数据库。它支持可选域,并且可以在不修改架构的情况下增加或减少域。  为了支持完整性约束,选择支持SQLDDL的数据库,可以用存储过程或者应用程序代码来实现。  是一个用于深度连接的图数据库,支持实体键之间的快速定位。  为了让计算更贴近数据,减少数据在网络中传输的开销,可以考虑存储过程。关系数据库、网络数据库、文档数据库和键值数据库都支持存储过程。  如果你的应用有以下需求:  要存储BLOB数据,可以选择Key-value数据库。它可以存储网页或复杂的对象,这需要在关系数据库中进行连接,这很昂贵。还减少了延迟。  选择一个经过验证的成熟产品,在处理可扩展性问题(垂直扩展、调优、缓存、数据分片、反范式等)时选择通用解决方案  数据类型多变,数据不规则,列数不固定,数据结构复杂等,考虑文档数据库,Key-value数据库,Bigtable数据库。它们的数据类型相对灵活。  需要快速关系查询,又不想自己实现,那就选择支持SQL的数据库。  能够在云中运行并自动利用云的所有功能和优势,目前还没有这样的东西。  如果你的应用有以下需求:  支持二级索引,通过不同的key检索,可以考虑关系型数据库和Cassandra,它增加了对二级索引的支持。  规模在不断增长(真实大数据场景),但是不经常访问的数据可以使用Bigtable类型的数据库,因为它的数据存储在分布式文件系统上,易于扩展。  与其他服务集成,检查数据库是否提供某种写后同步功能,使其能够捕获数据库变化,通知其他系统,保证一致性。  容错,在断电、分区故障等故障场景下检查写操作是否成功。  如果你只是想推动某个方向的技术革新,似乎没有现成的东西可以实现这个目标,你必须自己创造一个新的。这不是一件容易的事。  移动平台可以使用CouchDB/Mobilecouchbase。  哪个比较好?  为了25%的性能提升而迁移到NoSQL是不值得的。  性能测试数据有其特定的场景,可能不适合您的情况。  如果你的公司刚刚成立,还没有产品,愿意尝试新事物,那么选择SQL还是NoSQL需要注意一些(言外之意是一张白皮书很容易paint,你可以在没有现有系统负担的情况下折腾?)。  数据量小的时候性能差距不明显,但是数据量大的时候呢?性能和服务投诉,GAE也是一样。每个产品都会有问题,你能解决你选择的产品的问题吗?