性能&分布式&NewLife.XCode对无限数据的支持

简介: 上周发布了《改进版CodeTimer及XCode性能测试》,展示了NewLife.XCode在性能上的表现。实际上NewLife.XCode是一个很平凡的ORM,只是在分页和缓存方面多下点功夫,注意每一个细节,才能保证在数据量大、业务繁忙的环境中得以保持良好的性能。

    上周发布了《改进版CodeTimer及XCode性能测试》展示了NewLife.XCode在性能上的表现。实际上NewLife.XCode是一个很平凡的ORM,只是在分页和缓存方面多下点功夫,注意每一个细节,才能保证在数据量大、业务繁忙的环境中得以保持良好的性能。

    NewLife.XCode所经历过的比较忙的一个系统是一个网吧行业的核心系统,为五千家网吧,一百万客户端提供服务,每天大概有十几万会员多次登录客户端。当然这一百万客户端不可能同时全部登录。因为业务需要,每个客户端每隔一段时间(几秒)Ping一次服务端,刷新在线记录。只有一台服务器运行服务端,windows2003,双核CPU,4G内存,自组装共花费7kRMB。因为担心TCP链接数限制,没有采用TCP通讯,而直接使用WebService+IIS。开了三四个IIS站点,缓存全开的情况下,每个进程占用200M到500M内存。数据库是windows2008R2+MSSQL2008,四核CPU,32G内存,自组装共花费14kRMB,MSSQL进程占了10G多内存。

    这次的主角是一位个人站长使用NewLife.XCode做的系统(采集+整理+网站),我们先看现状

服务器配置(国外,64位平台,2G内存少了些)

image

网站建立时间:20天

每日访问量:14000IP  12000PV

IIS CPU:0(因为网站的缓存命中率极高

IIS 内存:200,000k * 3(3个进程)

MSSQL

CPU:0(数据整理子系统写入,网站读取

内存:500,000k

重要表个数:400(表结构一致,因为数据量大才分表

重要表数据量:20,000,000(20M*400=8B?80亿?)

数据增长速度:每2小时1万条

SQLite

重要表个数:7

重要表数据量:20,000,000

数据增长速度:每1小时2万条

 

    1,采集子系统,采集到的数据写入一个SQLite,采集过程中也需要查询

    2,数据整理子系统,分析整理SQLite中的数据,归档到MSSQL中

    3,网站根据用户的查询,读取MSSQL中的数据来展现

 

    这个系统是个什么样的规模?昨天站长告诉我,截止下午四点,当天广告收人173刀。

    现在才不到一个月,数据还是很少的。站长所苦恼的地方在于:如何存储这些会无限增长的数据?

 

    以下是站长目前使用的手段:

    1,拆分表。XCode有个武艺(详见《充血模型的ORM能做什么?——ORM组件XCode(十八般武艺)》),可以动态改变实体类所映射的表名。于是根据数据类别来分表,重载实体类的数据操作方法,查询和写入前,根据当前数据类别计算表名并修改,实现了一个实体类对应多个相同结构的数据表。并且,如果该名称的数据表不存在,XCode的反向工程会自动创建。使用者一点都不用关心,上层使用代码就跟使用单表一样。

    2,采集和网站数据库分离,开始的时候采集也是写入MSSQL,显然,这会让MSSQL变得很忙,并且会带来因采集而导致网站不正常的风险。

    3,缓存。网站对数据的实时性要求不高,采集而来的数据,可以在一两个小时之后才反映到网站上来。因此,网站打开一级缓存,缓存时间可以设置为1小时。一级缓存这里不能设为永久,否则就再也拿不到采集到的新数据了,除非进程重启。期间也遇到缓存经常失效的问题,经查是IIS应用程序池回收所致,设为固定时间回收就可以了。

image

static void TestLog()
{
    NewLog log = new NewLog();
    log.Action = "Test";
    log.Category = "SystemLog";
    log.Save();

    log = new NewLog();
    log.Action = "Test";
    log.Category = "UserLog";
    log.Save();
}
class NewLog : Log<NewLog>
{
    public override int Insert()
    {
        Meta.TableName = Category;
        return base.Insert();
    }
}

    这么做,几千张表,每张表两千万的数据,应该是没有问题的了。

    当然,这其中还是有一些问题的

    1,SQLite写入频繁,偶尔发生多线程冲突,XCode中的SQLite提供者增加了失败重试机制,降低了冲突几率,大概万分之一

    2,SQLite数据增长过快,显然,这个问题很严重,但也不是不能解决,XCode除了能动态改变表名,还能动态改变连接名,也就是说,跟拆分表一样,能够轻易的实现拆分库。

    3,拆分库又会带来IO的问题,这个时候,只能使用更多的数据库服务器。

    4,如果网站使用的MSSQL成为瓶颈怎么办?可以使用多个MSSQL服务器,假如10个,配置文件中配置10个对应的连接字符串,重载实体类的查询方法,查询之前动态修改连接名。至于该使用哪一个连接名,就看自己实现的算法了,最简单的就是轮询或者随机。这样子就很轻易的实现了简单的分布式。新版本内置了分布式的提供者,可以根据权重随机分发查询,还可以把数据同时写入到多个目标数据库中去,而这些,都不需要修改业务实现代码。

 

    不要怪我们狠(臃肿?),因为我们是充血模型!

 

    http://xcode.codeplex.com/

我不相信神话,我只相信汗水!我不相信命运,我只相信双手!
相关文章
|
2天前
|
监控 API Android开发
构建高效的安卓应用:内存优化策略详解
【4月更文挑战第21天】在移动应用开发中,内存管理是影响性能的关键因素之一。尤其对于安卓平台,由于设备硬件配置差异较大,良好的内存优化策略成为确保应用流畅运行的必要条件。本文将深入探讨针对安卓平台的内存优化技巧,包括内存泄漏的预防、合理的内存分配与回收以及使用工具进行监控和分析。通过实践案例分析,旨在为开发者提供一套系统的内存优化解决方案,帮助提升应用性能并减少崩溃率。
|
3月前
|
缓存 JavaScript CDN
如何优化Uniapp应用程序的性能?
如何优化Uniapp应用程序的性能?
85 0
|
9月前
|
存储 缓存 iOS开发
iOS 轻量化动态图像下载缓存框架实现
日常开发过程中,图片的下载会占用大量的带宽,图片的加载会消耗大量的性能和内存,正确的使用图片显得尤为重要。 同样也经常需要在各类型控件上读取网络图片和处理本地图片,例如:UIImageView、UIBtton、NSImageView、NSButton等等。
iOS 轻量化动态图像下载缓存框架实现
|
数据管理 测试技术 C#
一个近乎完美的Unity全平台原生c#热更方案
HybridCLR是一个特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更方案。
514 0
一个近乎完美的Unity全平台原生c#热更方案
|
人工智能 前端开发 JavaScript
提高Java开发效率:5个常用的Visual Studio代码扩展工具
对于软件工程师来说,能够更好地管理时间是一项宝贵的技能。因此,这里有5个Visual Studio代码扩展工具,可以帮助前端开发人员(以及更多的人!)将生产力至少提高10%到20%,下面和小编一起来看看吧!
188 0
提高Java开发效率:5个常用的Visual Studio代码扩展工具
|
缓存 JavaScript API
NodeJS V18稳定版本正式发布,这个特性太棒了
NodeJS V18稳定版本正式发布,这个特性太棒了
1693 0
|
JSON Shell 程序员
macOS 神器 Workflow ,让效率翻倍!
【Alfred Workflow】放过你的记事本,用EasyAlias来提效
3714 0
macOS 神器 Workflow ,让效率翻倍!
|
弹性计算 前端开发 IDE
前端突破——IDE 插件发布 Visual Studio Code 新版本,一键打包部署,开发提速 8 倍
去年,阿里云发布了本地 IDE 插件 Cloud Toolkit,仅 IntelliJ IDEA 一个平台,就有 15 万以上的开发者进行了下载,体验了一键部署带来的开发便利。时隔一年的今天,阿里云正式发布了 Visual Studio Code 版本,全面覆盖前端开发者,帮助前端实现一键打包部署,让开发提速 8 倍。
3992 0
前端突破——IDE 插件发布 Visual Studio Code 新版本,一键打包部署,开发提速 8 倍
|
Kubernetes Dubbo Java
IDE 插件新版本发布,总有一个功能帮到你——开发部署提速 8 倍
对于开发者而言,提高工作效率大概有 2 种主要方式,第一种方式就是加快自己的工作速度,争取在同一段时间内多码一些代码、多干一些活来实现多产;而聪明的开发者会选择第二种方式,就是通过插件,让一些重复性的、繁琐性的工作被自动化,从而节省出时间来做一些实质性的业务,达到轻松又高效的工作步调。
3972 0
IDE 插件新版本发布,总有一个功能帮到你——开发部署提速 8 倍
|
应用服务中间件 开发者 Dubbo
《免费 | 开发部署效率提升 8 倍,这款 IDE 插件让应用部署不再重复、繁琐》
对于开发者而言,提高工作效率大概有 2 种主要方式,第一种方式就是加快自己的工作速度,争取在同一段时间内多码一些代码、多干一些活来实现多产;而聪明的开发者会选择第二种方式,就是通过插件,让一些重复性的、繁琐性的工作被自动化,从而节省出时间来做一些实质性的业务,达到轻松又高效的工作步调。
5145 0

热门文章

最新文章