在我的公司中,我们在SQL Server中托管了多个数据库结构。 例如,每当新客户注册我们时,我们在SQL Server中创建一个新数据库来维护他们的数据。
目前我们的数据库服务器已经拥有2000多个数据库。我们预计更多客户将在不久的将来注册,甚至可能超过5000+。 拥有5000多个数据库并增加数据库数量可能不是一个明智的数据库,有时我们会运行一些将在数据库中运行的任务,如果我们要在5000多个数据库中运行任务,我们肯定会遇到性能问题。
避免为每个客户创建多个数据库并同时单独维护数据的替代解决方案是什么?
我听说过BigData和其他DataBase解决方案,但无法得到清晰的图片。
有人可以分享一下吗?
答案 0 :(得分:0)
如果数据库具有相同的架构,您可以将它们合并为一个。这样,每个客户的表现在将成为新数据库中的一组行。新客户可能会在表格中存储一些用于存储客户个人资料的新行。
您可以使用行级安全性来限制对客户数据的访问: - https://msdn.microsoft.com/en-us/library/dn765131.aspxpx
有关使用此方法优于现有的优缺点,请参阅:Pros/Cons Using multiple databases vs using single database和Single or multiple databases
使用其他选项可提供良好的学习机会,但即使有一些确实更好,也可能会产生巨大的转换成本。
答案 1 :(得分:0)
听起来你问的是如何从SQLServer中删除架构。如果是这样,这个问题已在这里得到解答:SQL Server 2008 delete all tables under special schema
答案 2 :(得分:0)
我建议的一个解决方案是在每个客户的表名上使用前缀。然后,您可以通过每组表格限制每个客户来解决安全问题。
con是您必须重写您的应用程序,以便在每个表都要访问它时使用前缀。如果您有很多表,那将是一个问题。
我认为这是多个Wordpress托管网站处理数据库问题的方式。
答案 3 :(得分:0)
很大程度上取决于您如何构建信息以及所需的访问类型。您是否考虑过使用像Apache Solr这样的搜索引擎?
答案 4 :(得分:0)
你应该考虑是否只是存储数据并使用简单的查询来访问它,或者如果你经常进行复杂的查询,如果你只是存储数据并使用简单的查询访问它并且你的需求不是100%关系,你应该考虑将部分数据移动到HDFS文件系统: https://en.wikipedia.org/wiki/Apache_Hadoop#HDFS。 要处理hadoop中的数据,有许多工具,但肯定会提高火花: https://en.wikipedia.org/wiki/Apache_Spark
可能最好的解决方案是开始在HDFS中移动您的历史数据,仅用于存储,并保持其余部分,直到您对hadoop和spark范例充满信心
hadoop是一个分布式的容错文件系统,spark是批量处理大量非结构化或结构化数据的引擎,考虑到hadoop中的数据通常不是结构,所以你必须改变处理数据的方式,如果你想仍然使用sql我建议检查Impala和Hive:
查看cloudera网站,了解更多结构化IT解决方案,而不是需要组织的大量单一工具 http://www.cloudera.com/content/www/en-us/solutions.html
他们有一个快速启动VM来尝试所有hadoop生态系统工具,这可能是开始实验的最佳方式:
http://www.cloudera.com/content/www/en-us/downloads/quickstart_vms/5-4.html