cod*_*ver 7 postgresql web-applications neo4j nosql graph-databases
我正在实现一个基于sinatra/rails的门户网站,最终可能只有很多:表/模型之间的许多关系.这是一个单人团队,兼职,但真实世界的应用程序.
我与某人讨论了我的实体,并建议尝试neo4j.来自真正的"非性感"企业世界,我倾向于使用关系数据库,直到它停止缩放或因为分片等而成为一场噩梦,然后考虑其他任何事情.
然而,
寻找neo4j更好的用例,特别是在项目的原型设计/初始阶段.我知道如果网站增长,我可能最终会拥有多种持久性技术,如s3,关系(PG),mongo等.
了解Rails/Ruby生态系统如何发挥作用也是一件好事.
UPDATE1:
我得到了很多好的答案,看起来正确的做法是坚持使用Postgres(特别是因为我部署到heroku)
然而,无模式的想法很诱人.基本上我正在考虑一种方法,在你说100-150个用户之前你没有定义数据模型,而你自己已经为你的产品找到了一个好的模式(业务用例),而你只是在演示这个概念并获得有限注册的反馈.然后,人们可以决定一个架构并从关系开始.
很高兴知道是否有易于使用的架构/较少持久性选项(基于易于使用/设置为新用户)可能会放弃说缩放等.
如果您的数据模型非常混乱,则应考虑使用图形数据库.他们需要表达实体之间高度复杂的关系.为此,它们在数据级别存储关系,而RDBMS使用声明式方法.存储关系只有在这些关系非常不同时才有意义,否则你最终会反复复制数据,无需占用大量空间.要求这种多样化的关系,你必须处理大量的数据.这是图表数据库闪耀的地方,因为做大量连接的实例,他们只是选择一个记录并跟随他的关系.为了支持我的陈述:您会注意到Neo4j网站上的每个用例都处理非常复杂的数据.
简而言之,如果您不关心我上面所说的内容,我认为您应该使用其他技术.如果这只是关于扩展,无模式或快速启动项目,那么请查看其他NoSQL解决方案(更具体地说,是列或面向文档的数据库).否则你应该坚持使用PostgreSQL.你可以像你说的那样考虑多语言持久性,
关于您的更新,您可以考虑使用hStore.我认为它符合您的要求.这是一个PostgreSQL模块,也适用于Heroku.
我不认为我同意您的数据模型非常复杂时只应使用图形数据库.我相信他们也可以处理简单的数据模型/关系.
如果您之前没有Neo4j或Postgres的经验,那么很可能两者都需要花费相当多的时间来学习.
采摘时要记住的一些事项:
这不仅仅是针对数据库技术的开发.您也应该考虑部署.部署和扩展Postgres/Neo4j有多容易?
考虑每种技术的社区和工具.是否有像Postgres一样的Neo4j数据映射器?
考虑到两者之间的数据模型差别很大.如果你已经可以在关系上思考,那么我可能会坚持使用Postgres.如果你选择Neo4j,你的数据模型会在几个月内犯下很多错误.
随着时间的推移,我学会了尽可能地保持简单.与Neo4j相比,Postgres可能是无聊的选择,但是无聊并不能让你夜不能寐.=)
我也从未见过有人提过它,但你也应该看看Riak(http://basho.com/riak/).它是一个文档数据库,它还提供对象之间的关系(链接).不像图数据库那么成熟,但它可以快速连接几个实体.
最合适的选择取决于您要解决的问题.
如果您只有几个到多个表,那么关系数据库就可以了.通常,对关系数据库有更好的OR映射器支持,因为它们更老,并且具有标准化接口和行列结构.它们也经过了长时间的改进,因此它们可以稳定并针对它们的工作进行优化.
图形数据库更好,例如你的问题更多的是关于实体之间的连接,特别是如果你需要更高距离的连接,例如"检测周期(未指定长度)",一些"朋友的朋友喜欢什么".当限制为SQL连接时,这样的事情变得难以处理.在Neo4j的情况下,像cypher这样的特定问题语言使得更加简洁.在缺点方面,图形dbs和对象之间有映射器,但不适用于太阳下的每个框架和语言.
我最近使用neo4j实现了一个系统原型,能够谈论数据的结构和连接以及能够在数据存储中对一对一进行建模非常有用.此外,在数据点之间添加其他连接很容易,neo4j是无模式存储.由于写入性能的问题,我们最终切换到mongodb,但我不认为我们可以在同一时间完成原型.
其他NoSQL数据存储区(如基于文档,列,键值)也涵盖特定用例.多语言持久性最终需要注意,因此请将后端选择与业务逻辑分开,以便在以后学习新内容时更改技术.
| 归档时间: |
|
| 查看次数: |
8679 次 |
| 最近记录: |