如何解决自动部署多应用程序的DB结构
| 我想创建一个类似于basecamp或mailchimp的应用程序。客户自己注册,然后自动为其自己设置应用程序。该应用程序将使用cakephp开发。 我的问题是最好的数据库结构是什么? 在一张表中,所有客户均按客户ID分隔。 每个拥有自己的数据库+数据库用户的客户。 在他的文件夹中为每个SQLite文件使用一个。解决方法
可能有不同的实现方法,每种方法都取决于应用程序的性质,例如为每个用户提供了什么功能,涉及到的每个用户数据以及这些数据之间的关系,涉及到的每个用户数据量等等。
方法1:单一应用数据库;根据应用程序的功能/结构有多个表,但是这些表保存着所有用户的数据。例如
comments
,permissions
,categories
等。
优点:简单的体系结构,轻松快速的检索和插入
缺点:如果表太大或涉及复杂索引,数据库操作可能会变得昂贵
方法二:单一应用数据库;根据应用程序的功能/结构的多个表;每个用户都有可能由user_id标识的自己的表集。例如,对于user_id = 1,表可能是comments_1
,permissions_1
,categories_1
等。
优点:还是简单的架构;易于识别要查询特定用户的表;由于表仅包含特定用户的数据,因此至少要少一个WHERE子句(其中user_id = xx);较小的表,因此检索速度更快;在繁忙的时间内发生锁冲突的机会更少
缺点:需要更多维护;添加需要添加新列或表的更新功能,将需要对所有用户表集进行模式更改;
方法3:每个用户多个应用程序数据库
优点:用户之间的数据100%隔离;如果每个用户都需要自定义功能,则易于调整数据库模式;易于在多个服务器之间拆分数据库以实现负载平衡;
缺点:复杂的体系结构;需要更多维护;存储公共数据或共享数据更加棘手-数据可以复制到每个用户数据库,也可以维护公共数据库。
我认为,如果对架构进行有效设计,以便在更快的SELECT / INSERT和每个表的数据量之间保持平衡,则第一种方法应该适合100-10000个用户。但是,它将需要大量数据库调整和智能索引。
从方法2和3来看,两者都可以正常工作,但是从我的角度来看,方法3更好,因为它可以为您提供更大的灵活性。实施可能需要一些时间,但并不难
另外,SQLite似乎不适用于这样的实现。我会建议像MySQL这样的关系数据库。
希望以上内容对实现有所帮助,并帮助您确定最适合您的应用程序的部分。
,如果您要变大(可伸缩),那么SQLite可能不是您的最佳选择。真正的RDBMS效率要高得多。话虽如此,如果您真的要进行扩展,那么Cake也不是最有效的选择。这些都是您根据业务模型做出的决策。有志向是一件好事,但成为10,000磅的大猩猩……双关语是罕见的。
我公司有一个应用程序可以为数十个客户执行市场营销自动化,该应用程序使用一个公共数据库执行常见功能,并使用一个单独的数据库获取唯一数据。是的,它有效,而且实际上非常有效,并且在分离数据方面做得很好,因此DB不会失控。...实际上,共享的数据库具有包含数百万条记录的表。话虽如此,但跟踪您的连接却往往是造成我们错误的原因。删除一个会话或实例化错误,然后BOOM!是烤面包。我经常发现自己必须完全限定查询条件才能使事情正常进行,这只会增加压力。我不认为我会再次这样做。
同样,从纯粹的角度来看,必须在数以千计的数据库中查找数据库也不是我午后的好主意。我不喜欢必须跳过50条才能找到进行故障排除所需的数据。
对于单个数据库,一个连接就可以正常工作。从开发人员的角度来看,它要容易得多。我很难说出性能方面的好处,因为我们的应用程序受到效率极低的框架(传统Symfony)的影响最大
, 我们正在创建一个结构类似的应用程序,人们可以在其中注册并创建自己的内部应用程序。我们正在使用MySQL,所有数据都存储在同一数据库中。我们采用了这种方式来组织表,以这种方式使用登录凭据可以轻松地在整个站点上识别所有数据,并在需要时提取它们。
, 我建议您研究一些新的创新型数据库。对于庞大的数据集,正常的SQL DB随着数据量超过特定点而开始不足。这就是Google创建其BigTable项目(http://en.wikipedia.org/wiki/BigTable)的原因。这也是NoSQL运动的背后(http://en.wikipedia.org/wiki/NoSQL)。
我特别建议您使用MongoDB(http://en.wikipedia.org/wiki/MongoDB)。它是一个NoSQL数据库,以面向对象的方式将信息存储在类似JSON的文档中。刚开始时,它有点缠住您的头,但是它确实有效并且非常快。我有一个伙伴使用MongoDB和Zend Framework启动了一个全新的动漫网站,他的网站与Google所提供的任何东西一样快,甚至更快,而且他运行在一台专用服务器上。
您可以在http://www.mongodb.org/上找到MongoDB。
这是与CakePHP一起使用的指南:http://mark-story.com/posts/view/using-mongodb-with-cakephp
MongoDB网站还提供了更多有关此方面的信息:http://www.mongodb.org/display/DOCS/PHP+Libraries、+Frameworks和+ Tools
,我强烈建议您使用NoSQL设计。 NonSQL意味着可伸缩非关系数据存储,无需连接,且具有轻量级语义。 NonSQL方法将通过获得新模型和有关数据的观点来改善开发应用程序的方式。
NoSQL DB倾向于将磁盘上的内存用作一流的写入位置:Redis和Memcached仅在内存中使用,甚至像Cassandra这样的系统也使用memtables进行异步刷新到磁盘的写入操作,从而防止I / O性能不一致导致写入速度的提高瓶颈。而且由于NoSQL数据存储区通常会通过分区来强调水平可伸缩性,因此这使它们处于利用云的弹性配置功能的绝佳位置。 NoSQL和云很自然。
您有什么选择?
在某些情况下,NoSQL可以为您提供更好的性能:
-频繁写入的,很少读取的数据(如Web计数器)或来自日志记录设备的数据: MongoDB
-频繁读取,很少写入/更新:Mescached用于瞬时数据缓存,Cassandra |使用HBase进行搜索,使用Hadoop和Hive进行数据分析
-要求停机时间最少的高可用性应用程序,可以很好地与群集的冗余数据存储区配合使用:卡桑德拉
-跨多个位置的数据同步:CouchDB
-瞬时数据(Web会话和缓存)在瞬时键值数据存储中表现出色:Memcached
-由业务或Web分析产生的大数据可能不遵循任何明显的模式:Hadoop
组合?
明智地将不同数据存储组合在一起,可能会更好地适合您的应用程序。因此,请检查此主题并选择。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。