SQL Databases Don't Scale (简译)
我经常问的一个问题是:你是如何来扩展SQL Database的?有很多的方法可以做到,比如使用缓存,共享或者用其他的技术将压力从数据库释放,但实际上我们没有。SQL Database从根本上来说是不具有扩展性的,我们也没有魔法使它忽然具有扩展性。
什么是扩展性?
必须具有几下几点:
横向扩展:更多的server可以带来更高的性能。
对应用程序的透明性:扩展的实现对于业务逻辑来说是透明的,逻辑上只有一个server服务于业务。
单点失败不会导致故障:单个server或者节点的宕机不会导致系统的失败。
接下来,让我们看一些技术如何“扩展”SQL Database以及他们为什么没有达到以上几点。
纵向扩展
一种方法去扩展SQL Database是买更大的server或者存储。这带来的问题是:
运输变的复杂
原来的机器落后,升级变的浪费资源
你不知道到底类似容量这样的问题会变的有多大
这个不符合扩展性的第一条。
分区,共享
根据逻辑对数据进行分区。这种方法也是纵向扩展的一种方法,它紧密依赖于应用并且你需要仔细的去计划你的schema。
这种方法对于程序来说是不透明的,必须和业务结合在一起,不符合扩展性的第二条。更严重的问题是,数据库是关系数据库,存储的数据也是相关的,这样的相关数据分布在多个server上,你需要为这样重复的关系服务,而且当他们返回时必须在客户端重新构建这样的关系。
只读的Slave
MySql的杀手级应用就是配置方便的master-slave复制,你可以用一个read-only-slave来处理你的读应用而把所有的insert update delete都由master来处理。
这种方式是最好的扩展方式,这也是很多大型的MySql在使用的方法。对于读扩展来说这样的方法是好的,对于写扩展来说这样的效率还是不行的,而且当你维护master server的时候,也会造成整个系统的宕机。
原文:http://adam.blog.heroku.com/past/2009/7/6/sql_databases_dont_scale/
相关文档:
从博客园中看到一篇文章,介绍大软件公司面试时常常会出的两道SQL题(见附录)。
我觉得受益很多,在此之前,我一直觉得,SQL2008似乎提供了这方面的支持,但更低的版本,包括2005,非游标做不出来(水平够菜)。总结心得如下:
1、 强大的group by
1 select stdname,
2 isnull(sum( ......
SqlServer 的性能比 Access 提高的不止一点了。
不过,科汛CMS的免费版带的是 Access 数据库。
有没有办法转成 mssql 的呢?当然可以
1, mssql中新建一张表,然后导入 access 里面的表和数据.
这个网上有方法,不多说了。
2, 修改 conn.asp 到 sql server 版本,这个也简单。
3, 浏览数据,直接就可以看 ......
我说的不定条件是指查询条件的个数不定。有时一个,有时两个,有时好几个。
首先我发现
select * from A where a='kkk' 与
select * from A where a like 'kkk'
其实效果是一样,只要 like 后面的字符串不包含通配符。这样一来就很方便了。譬如有
select * from A where a='KKK' and b='LLL'
有两个查询条件, ......
SQL聚合函
标签:sql聚合函数 杂谈
聚合函数:
1.AVG 返回组中的平均值,空值将被忽略。
例如:use northwind // 操作northwind数据库
Go
Select avg (unitprice) //从表中选择求unitprice的平均值
& ......
sql 函数总结
常用的字符串函数有:
一、字符转换函数
1、ASCII()
返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。
2、CHAR()
将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII ......