当前位置: 首页 > news >正文

洪山网站建设祥云网站推广

洪山网站建设,祥云网站推广,怎么建设自己产品网站,免费矢量图素材网NewLife.XCode是一个有15年历史的开源数据中间件#xff0c;支持netcore/net45/net40#xff0c;由新生命团队(2002~2019)开发完成并维护至今#xff0c;以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析#xff0c;蕴含多年开发经验于其中#xf… NewLife.XCode是一个有15年历史的开源数据中间件支持netcore/net45/net40由新生命团队(2002~2019)开发完成并维护至今以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析蕴含多年开发经验于其中代表作有百亿级大数据实时计算项目。开源地址https://github.com/NewLifeX/X 求star, 938 XCode是重度充血模型以单表操作为核心不支持多表关联Join复杂查询只能在where上做文章整个select语句一定是from单表因此对分表操作具有天然优势 阅读本文之前建议回顾《百亿级性能》其中“索引完备”章节详细描述了大型数据表的核心要点。 100亿数据其实并不多一个比较常见的数据分表分库模型MySql数据库8主8从每服务器8个库每个库16张表共1024张表从库也有1024张表 每张表1000万到5000万数据整好100亿到500亿数据 回到目录例程剖析 例程位置https://github.com/NewLifeX/X/tree/master/Samples/SplitTableOrDatabase 新建控制台项目nuget引用NewLife.XCode后建立一个实体模型修改Model.xmlTables Version9.12.7136.19046 NameSpaceSTOD.Entity ConnNameSTOD Output BaseClassEntity xmlns:xshttp://www.w3.org/2001/XMLSchema-instance xs:schemaLocationhttp://www.newlifex.com https://raw.githubusercontent.com/NewLifeX/X/master/XCode/ModelSchema.xsd xmlnshttp://www.newlifex.com/ModelSchema.xsdTable NameHistory Description历史ColumnsColumn NameID DataTypeInt32 IdentityTrue PrimaryKeyTrue Description编号 /Column NameCategory DataTypeString Description类别 /Column NameAction DataTypeString Description操作 /Column NameUserName DataTypeString Description用户名 /Column NameCreateUserID DataTypeInt32 Description用户编号 /Column NameCreateIP DataTypeString DescriptionIP地址 /Column NameCreateTime DataTypeDateTime Description时间 /Column NameRemark DataTypeString Length500 Description详细信息 //ColumnsIndexesIndex ColumnsCreateTime //Indexes/Table/Tables在Build.tt上右键运行自定义工具生成实体类“历史.cs”和“历史.Biz.cs”。不用修改其中代码待会我们将借助该实体类来演示分表分库用法。为了方便我们将使用SQLite数据库因此不需要配置任何数据库连接XCode检测到没有名为STOD的连接字符串时将默认使用SQLite。此外也可以通过指定名为STOD的连接字符串使用其它非SQLite数据库。 按数字散列分表分库大量订单、用户等信息可采用crc16散列分表我们把该实体数据拆分到4个库共16张表里面static void TestByNumber(){ XTrace.WriteLine(按数字分表分库);// 预先准备好各个库的连接字符串动态增加也可以在配置文件写好for (var i 0; i 4; i) {var connName $HDB_{i 1}; DAL.AddConnStr(connName, $data sourcenumberData\\{connName}.db, null, sqlite); History.Meta.ConnName connName;// 每库建立4张表。这一步不是必须的首次读写数据时也会创建//for (var j 0; j 4; j)//{// History.Meta.TableName $History_{j 1};// // 初始化数据表// History.Meta.Session.InitData();//} }//!!! 写入数据测试// 4个库for (var i 0; i 4; i) {var connName $HDB_{i 1}; History.Meta.ConnName connName;// 每库4张表for (var j 0; j 4; j) { History.Meta.TableName $History_{j 1};// 插入一批数据var list new ListHistory();for (var n 0; n 1000; n) {var entity new History { Category 交易, Action 转账, CreateUserID 1234, CreateTime DateTime.Now, Remark $[{Rand.NextString(6)}]向[{Rand.NextString(6)}]转账[{Rand.Next(1_000_000) / 100d}] }; list.Add(entity); }// 批量插入。两种写法等价//list.BatchInsert(); list.Insert(true); } }}通过 DAL.AddConnStr 动态向系统注册连接字符串var connName $HDB_{i 1};DAL.AddConnStr(connName, $data sourcenumberData\\{connName}.db, null, sqlite);连接名必须唯一且有规律后面要用到。数据库名最好也有一定规律。 使用时通过Meta.ConnName指定后续操作的连接名Meta.TableName指定后续操作的表名本线程有效不会干涉其它线程。var connName $HDB_{i 1};History.Meta.ConnName connName;History.Meta.TableName $History_{j 1};注意ConnName/TableName改变后将会一直维持该参数直到修改为新的连接名和表名。指定表名连接名后即可在本线程内持续使用后面使用批量插入技术给每张表插入一批数据。 运行效果如下    连接字符串指定的numberData目录下生成了4个数据库每个数据库生成了4张表每张表内插入1000行数据。指定不存在的数据库和数据表时XCode的反向工程将会自动建表建库这是它独有的功能。因异步操作密集建表建库时可能有一定几率失败重试即可 按时间序列分表分库日志型的时间序列数据特别适合分表分库存储定型拆分模式是每月一个库每天一张表。static void TestByDate(){ XTrace.WriteLine(按时间分表分库每月一个库每天一张表);// 预先准备好各个库的连接字符串动态增加也可以在配置文件写好var start DateTime.Today;for (var i 0; i 12; i) {var dt new DateTime(start.Year, i 1, 1);var connName $HDB_{dt:yyMM}; DAL.AddConnStr(connName, $data sourcetimeData\\{connName}.db, null, sqlite); }// 每月一个库每天一张表 start new DateTime(start.Year, 1, 1);for (var i 0; i 365; i) {var dt start.AddDays(i); History.Meta.ConnName $HDB_{dt:yyMM}; History.Meta.TableName $History_{dt:yyMMdd};// 插入一批数据var list new ListHistory();for (var n 0; n 1000; n) {var entity new History { Category 交易, Action 转账, CreateUserID 1234, CreateTime DateTime.Now, Remark $[{Rand.NextString(6)}]向[{Rand.NextString(6)}]转账[{Rand.Next(1_000_000) / 100d}] }; list.Add(entity); }// 批量插入。两种写法等价//list.BatchInsert(); list.Insert(true); }}时间序列分表看起来比数字散列更简单一些分表逻辑清晰明了。      例程遍历了今年的365天在连接字符串指定的timeData目录下生成了12个月份数据库然后每个库里面按月生成数据表每张表插入1000行模拟数据。 综上分表分库其实就是在操作数据库之前预先设置好 Meta.ConnName/Meta.TableName其它操作不变 回到目录分表查询说到分表许多人第一反应就是怎么做跨表查询不好意思不支持只能在多张表上各自查询如果系统设计不合理甚至可能需要在所有表上进行查询。不建议做视图union那样会无穷无尽业务逻辑还是放在代码中为好数据库做好存储与基础计算。 分表查询的用法与分表添删改一样static void SearchByDate(){// 预先准备好各个库的连接字符串动态增加也可以在配置文件写好var start DateTime.Today;for (var i 0; i 12; i) {var dt new DateTime(start.Year, i 1, 1);var connName $HDB_{dt:yyMM}; DAL.AddConnStr(connName, $data sourcetimeData\\{connName}.db, null, sqlite); }// 随机日期。批量操作 start new DateTime(start.Year, 1, 1); {var dt start.AddDays(Rand.Next(0, 365)); XTrace.WriteLine(查询日期{0}, dt); History.Meta.ConnName $HDB_{dt:yyMM}; History.Meta.TableName $History_{dt:yyMMdd};var list History.FindAll(); XTrace.WriteLine(数据{0}, list.Count); }// 随机日期。个例操作 start new DateTime(start.Year, 1, 1); {var dt start.AddDays(Rand.Next(0, 365)); XTrace.WriteLine(查询日期{0}, dt);var list History.Meta.ProcessWithSplit( $HDB_{dt:yyMM}, $History_{dt:yyMMdd}, () History.FindAll()); XTrace.WriteLine(数据{0}, list.Count); }} 仍然是通过设置 Meta.ConnName/Meta.TableName 来实现分表分库。日志输出可以看到查找了哪个库哪张表。这里多了一个 History.Meta.ProcessWithSplit  其实是快捷方法在回调内使用连接名和表名退出后复原。 分表分库后最容易犯下的错误就是使用时忘了设置表名在错误的表上查找数据然后怎么也查不到…… 回到目录分表策略根据这些年的经验Oracle适合单表1000万~1亿行数据要做分区MySql适合单表1000万~5000万行数据很少人用MySql分区如果统一在应用层做拆分数据库只负责存储那么上面的方案适用于各种数据库。同时单表数据上限就是大家常问的应该分为几张表在系统生命周期内一般1~2年确保拆分后的每张表数据总量在1000万附近最佳。根据《百亿级性能》常见分表策略如下日志型时间序列表如果每月数据不足1000万则按月分表否则按天分表。缺点是数据热点极为明显适合热表、冷表、归档表的梯队架构优点是批量写入和抽取性能显著状态表订单、用户等按Crc16哈希分表以1000万为准决定分表数量向上取整为2的指数倍为了好算。数据冷热均匀利于单行查询更新缺点是不利于批量写入和抽取至于是否需要分库主要由存储空间以及性能要求决定。 回到目录分表与分区对比还有一个很常见的问题为什么使用分表而不是分区大型数据库Oracle、MSSQL、MySql都支持分区前两者较多使用分区MySql则较多分表。分区和分表并没有本质的不同两者都是为了把海量数据按照一定的策略拆分存储以优化写入和查询。分区除了能建立子索引外还可以建立全局索引而分表不同建立全局索引分区能跨区查询但非常非常慢一不小心就扫描所有分区分表架构很容易做成分库支持轻易扩展到多台服务器上去分区只能要求数据库服务器更强更大分区主要由DBA操作分表主要由程序员控制  某项目使用XCode分表功能已经过生产环境三年半考验日均新增4000万~5000万数据量2亿多次添删改总数据量数百亿。 回到目录系列教程NewLife.XCode教程系列[2019版]增删改查入门。快速展现用法代码配置连接字符串数据模型文件。建立表格字段和索引名字以及数据类型规范推荐字段时间用户IP实体类详解。数据类业务类泛型基类接口功能设置。连接字符串调试开关SQL日志慢日志参数化执行超时。代码与配置文件设置连接字符串局部设置反向工程。自动建立数据库数据表数据初始化。InitData写入初始化数据高级增删改。重载拦截自增字段Valid验证实体模型时间用户IP脏数据。如何产生怎么利用增量累加。高并发统计事务处理。单表和多表不同连接多种写法扩展属性。多表关联Map映射高级查询。复杂条件分页自定义扩展FieldItem查总记录数查汇总统计数据层缓存。Sql缓存更新机制实体缓存。全表整理缓存更新机制对象缓存。字典缓存适用用户等数据较多场景。百亿级性能。字段精炼索引完备合理查询充分利用缓存实体工厂。元数据通用处理程序角色权限。Membership导入导出。XmlJson二进制网络或文件分表分库。常见拆分逻辑高级统计。聚合统计分组统计批量写入。批量插入批量Upsert异步保存实体队列。写入级缓存提升性能。备份同步。备份数据恢复数据同步数据数据服务。提供RPC接口服务远程执行查询例如SQLite网络版大数据分析。ETL抽取调度计算处理结果持久化
http://www.pierceye.com/news/192953/

相关文章:

  • 网站管理制度建设开发一个网站需要多少时间
  • 高校网站建设说明书微信公众号涨粉 网站
  • 深圳网站建设公司哪里好中国施工企业管理协会官网
  • 网站自动抢注步步高学习机进网站怎么做
  • 带域名的网站打不开深圳网站优化多少钱
  • 中国空间站科幻作文1000字网站建设从化
  • 做网站买一个域名就够了吗cn域名知名网站
  • 社科联网站建设个人网页英文
  • 做房产推广那个网站好网站改版建设原则
  • 网站建设 语言成都app
  • 免费建站的手机app专业做网站设计公司价格
  • 江苏宜兴做网站的电话seo基础培训
  • 企业手机端网站模板下载济南公司建站模板
  • 一般公司做网站多少钱南昌市房产网
  • 惠州网站小程序建设做公司永久免费网站什么好
  • 湖南涟钢建设有限公司网站局网站建设工作总结
  • 家乡ppt模板免费下载网站合肥百姓网网站建设
  • 免费整套ppt模板下载网站东莞建设教育网站
  • 漯河网站建设漯河ps制作个人网站首页
  • 电商网站公司软件开发和软件研发
  • 网站建设浙江公司网站开发运营新人要注意什么
  • 外贸网站模板哪里下载家里电脑可以做网站服务器吗
  • 长沙门户网站北京设计网站的公司
  • 站长统计平面设计找工作难吗
  • seo建站公司推荐电商平台活动策划方案
  • 建设淘宝客网站.lc和ev手机对比平台
  • vue 做企业网站特产网站开发背景
  • 奉新网站制作dede视频网站源码
  • 做动画网站去哪采集建设网站需要的资金清单
  • 网站后台发邮件注册公司需要什么证件和手续