惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
T
The Blog of Author Tim Ferriss
U
Unit 42
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
Vercel News
Vercel News
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
大猫的无限游戏
大猫的无限游戏
C
Check Point Blog
Blog — PlanetScale
Blog — PlanetScale
I
InfoQ
Y
Y Combinator Blog
F
Full Disclosure
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
S
SegmentFault 最新的问题
腾讯CDC
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Visual Studio Blog
Apple Machine Learning Research
Apple Machine Learning Research
人人都是产品经理
人人都是产品经理
Recent Commits to openclaw:main
Recent Commits to openclaw:main
The Register - Security
The Register - Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Azure Blog
Microsoft Azure Blog
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
C
CXSECURITY Database RSS Feed - CXSecurity.com
Hugging Face - Blog
Hugging Face - Blog
T
Threatpost
GbyAI
GbyAI
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
L
LangChain Blog
T
Tenable Blog
C
Cisco Blogs
T
Threat Research - Cisco Blogs
Google Online Security Blog
Google Online Security Blog

博客园 - 小草

mac系统及xcode使用的SVN客户端安装升级 快速升级App支持iOS6及iPhone5的4寸屏幕 尝鲜安装iOS6及新特性 Delphi处理Http请求自定义Header 浅谈项目与产品的区别 xcode4.2开发最新的ios5应用,分享snow版本下载地址 xCode 4.X 免证书真机发布及调试 第一个iPhone版本应用发布 【iPhone开发】说说Xcode4中xib绑定的原理 【iPhone开发】XCode4开发iPhone应用的体验 多机多屏显示器实战 存储过程与业务类实现业务的差异比较 业务逻辑实现方式的讨论:存储过程 good or bad? 安装VS2010中文版初体验 QQ邮箱里可以定阅博客园的文章了 升级到NVelocity1.1版本 解决Office 2010打开文件提示“文件已损坏,无法打开。”的问题 突破电信3G宽带对网页浏览的上网限制 华为EC1261使用小记
浅析SAAS数据模型设计(Oracle)
小草 · 2010-06-02 · via 博客园 - 小草

目前SAAS平台对于大家来说并不陌生,市场上真正属于SAAS应用的并不是特别多,还有很大一部分是ASP的模式在运行,不管对于公司还是技术部门都是很大的挑战。去年在做elearning项目的时候其实也就是一个ASP的模式扩展,ASP模式本身就会存在比较多的问题,虽然与传统的项目型有一定的区别,但从技术角度来看,差别不太大。

最近要弄一个SAAS平台的东西,所以恶补了一下相关的知识,在这里记录一下我的实践与总结。由于还没有最终验证也不太清楚效果如何。供大家讨论,希望可以给我一些意见。

使用的数据库Oracle10g,这篇只是从数据模型设计的角度来分析,使用的模式是:共享database独立Schema

Oracle中的实现方式:

1、共享一个数据库实例,免费的使用Tenant_Free实例,收费的使用Tenant_VIP实例,平台的数据使用Tenant_Platform实例。

2、独立Schema,通过建立每个Tenant的数据库用户来实现,每个用户使用的数据表根据用户导入的数据进行初始化。配置数据自动生成的方式。通过测试一个实例生成几万个数据库用户是很正常的,如果按照一台普通的服务器可以支撑1万个Tenant的话,那发展到10万用户可能只需要10台服务器的规模,是我可以接受的范围。

3、原先考虑让每个Tenant分配一个表空间,然后定义数据文件的大小来实现对每个Tenant数据空间的限制,但经过测试发现Oracle中添加表空间是有限个数的,我测试的时候加到200个左右就报错,提示超过表空间的最大数量。看来这种方法行不能。

如上图所示,所有的Tenant User都在用户管理库中进行管理,然后数据访问控制器通过Tenant User的信息自动选择Tenant对应的数据结构。可能我觉得这种模式是MVC的改进版本,即SAAS平台下要使用MVCD的模式(Model-View-Controller-DataAccess),数据管理层将模型层与控制层对数据管理方面的内容独立出来,负责数据库结构的管理、数据存取等功能。。

选择的理由:

1、在oracle里要使用独立的database对于服务器的内存要求实在太高了,一个实例分配的资源如果是200M的话,4G的服务器只能支持20个租户,这个成本我想没有什么人可以承受,所以第一种最简单的方式我不采用。

2、选择独立schema是非常重要的,对于程序与性能都会有很大的提升,而且业务要求所有企业相关的数据表字段都允许Tenant用户自定义,所以我觉得是必要条件,所以只能选择第二种模式。如果使用预留字段或者通过字段扩展表来存储存在比较多的问题,比如检索速度、字段的限制、数据冗余等缺点。而且对于用户来说不太直观。

3、从维护管理的角度考虑,备份的时候可以对每个数据库用户的数据进行单独的备份,有利于对无效用户的数据删除与恢复的操作。同时也保证了用户数据的安全性。

SAAS程序的要求:

1、要求可以通过配置自动实现Tenant Schema中数据的CRUD操作。

2、数据报表及相关的查询都要允许自定义,需要提供相关的功能。

3API接口服务需要提供配置功能。