Example #1
0
        /// <summary>为时间计算分表分库</summary>
        /// <param name="time"></param>
        /// <returns></returns>
        public virtual ShardModel Get(DateTime time)
        {
            var fi = Field;

            if (fi == null)
            {
                throw new XCodeException("分表策略要求指定时间字段!");
            }

            if (ConnPolicy.IsNullOrEmpty() && TablePolicy.IsNullOrEmpty())
            {
                return(null);
            }

            var table = fi.Factory.Table;

            var model = new ShardModel();

            if (!ConnPolicy.IsNullOrEmpty())
            {
                model.ConnName = String.Format(ConnPolicy, table.ConnName, time);
            }
            if (!TablePolicy.IsNullOrEmpty())
            {
                model.TableName = String.Format(TablePolicy, table.TableName, time);
            }

            return(model);
        }
Example #2
0
        private ShardModel[] GetModels(DateTime start, DateTime end)
        {
            var models = new List <ShardModel>();

            // 构建了一个时间区间 start <= @fi < end
            // 简单起见,按照分钟步进
            ShardModel last = null;

            for (var dt = start; dt < end; dt = dt.Add(Step))
            {
                var model = Get(dt);
                if (last == null || model.ConnName != last.ConnName || model.TableName != last.TableName)
                {
                    models.Add(model);
                    last = model;
                }
            }
            return(models.ToArray());
        }