我之前曾在Java + Spring上创建过一个web-app。 我现在必须建立一个新的网络应用程序。
它将有一个集中式数据库。 将有两种不同类型的web-app实例。
Web-App 1:
a) It would have nothing to UI render, no html,js etc.
b) All it need to give is some set of rest API which will
b.1) create some new entries in DB
b.2) modify some entries in DB
b.3) retrieve some of DB records in JSON format.
some frontend code ( doesn't belong to this app) will periodically fetch
this details.
c) it will be used by max by 100,000 people but at a given point of time,
we can expect about 1000 users logged in and doing whats being said in b)
Web-App2:
a) It will have some dashboards
b) 90% of DB operations would be read operations
c) 10% of DB operations would be write/modify
d) There will be about 1000s of user of this system and at any given point of time
hardly 50-1000 people will be accessing it.
我想跟随。 在RoR中创建的python + Django和Web-App 2中创建了Web-App 1。 我打算用到Dynamo DB和memcache。
为什么有两个不同的框架?
1)这样我就可以学习它们 2)人们一直担心RoR的可扩展性(我也知道人们声称它不存在),Web-app 1未来可能会有扩展需求。
我的问题是你看到这个组合有什么问题吗?
例如活动记录会要求您为数据库表使用特定的namings格式吗?还有其他类似的问题吗?
其他使用类似技术堆栈的人?
这两个框架都是full stack framework并提供MVC,模板,单元测试,安全性,数据库迁移,缓存,安全性,ORM。
答案 0 :(得分:2)
对于我的创业公司,我们还需要推出一个完整的网站和一个API。我们还使用DynamoDB存储大部分数据,并且仅使用MySQL进行会话信息。
我选择使用Ruby on Rails作为Webapp,使用Sinatra作为API。如果您的标准只是学习尽可能多的新东西,那么选择相对不同的堆栈(django / python和RoR)是有意义的。在我们的例子中,我们选择了sinatra,因为它本质上是一个非常轻量级的Rack包装器,非常适合基本上接收请求,调用一个或多个服务或进行一些处理并发出格式化响应的API。虽然我没有看到使用python / django而不是sinatra有任何问题,但在我们的例子中,好处是花费更少的时间使用不同的语言。
此外,rails中的可伸缩性是一个不确定的主题。最后,它是关于你如何使用它。我们在使用unicorn和nginx扩展rails时没有遇到任何问题。我们的业务逻辑全部在API服务中,rails服务器也在大多数工作中使用API。这意味着我们不会在轨道上使用活动记录,并且该网站只是我们API的另一个消费者,无论请求来自应用程序还是网站,它都能完成所有繁重的工作。将MySQL用于会话存储可确保我们可以将请求路由到任何应用程序服务器,而无需担心每次都将请求从同一客户端路由到同一服务器。这使得我们只需考虑到我们获得的流量就可以轻松上下移动。
当我们开始研究这个时,没有针对dynamo db的ORM看起来和感觉就像活动记录一样,所以我们最终编写了一些我们自己的高级类来处理模型的存储和检索在DynamoDb上。考虑到DynamoDB不是为扫描或连接而定制的,因此我们几乎总是根据键和范围进行查找,因此不需要花费太多精力。这意味着我们并不需要替换活动记录,因为活动记录的真正强度是能够按照惯例直观地进行连接等。
DynamoDB确实有它的局限性,你可能会发现自己需要扫描大量记录。在我们的案例中,我们还使用CloudSearch索引一些重要信息,并将其用作我们需要扫描所有数据的基于文本的搜索时的后备信息。