所以我一直在寻找NoSQL数据库而且我有。对他们非常着迷。所以我的问题是,可能在已经使用关系数据库的现有n层企业Web应用程序中添加第二个NoSql数据源的合法用途和/或原因是什么?
我在RavenDB博客上看到他们数据库的一个缺点是报告。这通常是文档数据库的情况吗?您是否可以使用SQLServer进行报告,将NoSql用于其他事情?这样的架构会是什么样的?
答案 0 :(得分:2)
这取决于你的应用程序缺少什么,我可以想到添加no-sql db的这些原因:
如果您的网络应用是高流量应用,那么您想要登录 一些用户行为数据:http://wiki.apache.org/cassandra/LoggingToCassandra
缓存或内存使用,您可以随时向您的应用程序添加内存数据库,如Redis,Riak,Hazelcast等,以提高其性能,(也可以考虑使用memcached)。这有助于搜索,用户会话和提供静态内容。
如果你需要一个发布/订阅服务器,Redis做得很好http://redis.io/topics/pubsub
用于以结构化方式存储数据,例如以JSON格式或图形,如mongoDB,OrientDB,neo4j和CouchDBs。您可以使用couchDB的内置REST api直接从Web客户端访问数据。
用于向您的网络应用添加新功能而不会影响现有数据库,例如您可以通过API向公众公开您的数据,或者希望添加实时搜索和索引功能。
对于可伸缩性,可以说no-sql dbs比关系型dbs更容易扩展。
答案 1 :(得分:2)
这里有很多好例子。似乎没有提到的一件事是创建一个非规范化的高事务读取层。这适用于CQRS世界。您的关系模型中的数据难以查询以创建报告可使用的数据。您可以将关系模型转换为平面模型......某些文档dbs表现良好。
答案 2 :(得分:1)
缓存是一种常见用法。例如,见另一个问题:
What's a suitable storage RDBMS,NoSQL, for caching web site responses?
答案 3 :(得分:1)
缓存确实是一种常见的用法。 Couchbase和Redis通常满足这一要求。
结构化日志存储也是一种常见用途。人们似乎喜欢使用Mongo存储结构化日志(而不仅仅是一个扁平字符串)。
处理大量数据的任何事情。例如,您可能会在网站上放置跟踪像素来跟踪网页点击次数/观看次数/用户活动。生成的数据可能非常大。 NoSQL数据库通常可以很好地水平扩展。
我还认为文档数据库(CouchDB,MongoDB,Couchbase)允许您存储任何过于痛苦而无法规范化的内容。花费所有时间制作表格和CRUD存储过程?可能更容易将富对象序列化为JSON并存储它!
这不是真正的NoSQL,但图形数据库可以有效地存储事物之间的关系。想想Facebook的社交图,甚至是推荐引擎。