Django与Rails共用一个数据库

1 投票
1 回答
564 浏览
提问于 2025-04-18 03:22

我之前用Java和Spring做过一个网页应用,现在需要再做一个新的网页应用。

这个新应用会有一个集中式的数据库,并且会有两种不同类型的网页应用实例。

网页应用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) 

网页应用2:

     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.

我在考虑以下方案:网页应用1用Python和Django来做,网页应用2用Ruby on Rails(RoR)来做。我打算使用Dynamo DB和memcache。

为什么要用两种不同的框架呢?

1) 这样我可以学习这两种框架。
2) 有人对RoR的扩展性表示担忧(我也知道有人说它的扩展性没问题),网页应用1将来可能需要扩展。

我想问的是,你觉得这种组合会有什么问题吗?

比如说,Active Record会要求你使用特定的命名格式来命名数据库表格?还有没有其他类似的担忧?

有没有其他人使用过类似的技术组合?

这两个框架都是全栈框架,提供MVC架构、模板、单元测试、安全性、数据库迁移、缓存、ORM等功能。

1 个回答

2

为了我的创业公司,我们需要建立一个完整的网站和一个API。我们使用DynamoDB来存储大部分数据,而MySQL则用来存储会话信息。

我选择了Ruby on Rails来做网页应用,Sinatra来做API。如果你的目标是尽可能多地学习新东西,那么选择一些相对不同的技术组合(比如django/python和RoR)是有意义的。在我们的情况下,我们选择Sinatra,因为它实际上是一个非常轻量级的框架,适合用来处理API。API的工作就是接收请求,调用一个或多个服务,或者进行一些处理,然后返回格式化的响应。我认为用python/django代替Sinatra没有问题,但在我们的情况下,选择Sinatra的好处是可以减少使用不同语言的时间。

另外,Rails的可扩展性是个有点复杂的话题。最终,这取决于你怎么使用它。我们在使用unicorn和nginx扩展Rails时没有遇到任何问题。我们的业务逻辑全部在API服务中,Rails服务器也主要依赖API来完成大部分工作。这意味着我们在Rails中不使用Active Record,网站只是我们的API的一个消费者,无论请求来自应用还是网站,API都会处理所有繁重的工作。使用MySQL来存储会话信息确保我们可以将请求路由到任何应用服务器,而不必担心每次都将同一客户端的请求路由到同一服务器。这使得我们可以根据流量的变化轻松地增加或减少服务器。

在我们开始这个项目的时候,DynamoDB并没有一个看起来和使用起来都像Active Record的ORM,所以我们最终写了一些高层次的类来处理DynamoDB中的模型存储和检索。考虑到DynamoDB并不适合进行扫描或连接操作,我们几乎总是根据键和范围进行查找,因此这并没有花费太多精力。这意味着我们并不需要Active Record的替代品,因为Active Record的真正优势在于能够通过约定直观地进行连接等操作。

不过,DynamoDB确实有它的局限性,你可能会遇到需要扫描大量记录的情况。在我们的案例中,我们还使用CloudSearch来索引一些重要信息,并在需要进行文本搜索时作为备用,这样可以扫描我们所有的数据。

撰写回答