首页 新闻 会员 周边

关于对应某个文件第一唯一命名的问题

0
悬赏园豆:200 [已关闭问题] 关闭于 2010-04-17 10:34

我想实现数据库里和XML同步的一个系统,通过ajax访问XML,但是在XML文件命名的时候犯难了,不知道哪种方法比较好。我考虑过用时间命名,再数据库加入对应的时间记录。ajax访问时先访问方法查询数据库得到文件名,再返回指定的xml文件,不过这样好像性能不是很高,想请教一下各位,有没有性能好点的方法

问题补充: GUID生成的名字感觉又太长
大熊先生|互联网后端技术的主页 大熊先生|互联网后端技术 | 初学一级 | 园豆:20
提问于:2010-04-10 23:01
< >
分享
所有回答(4)
0

其实也可以在SQL中存入XML数据
查询时用select * from table for xml auto等形式
http://msdn.microsoft.com/zh-cn/library/ms189887.aspx

邀月 | 园豆:25475 (高人七级) | 2010-04-10 23:16
数据库不一定是SQL啊,要实现通用的方法
0

流水号生成法,如果你的服务器永远不会挂掉,那么就这个

public static class SerialGenerator
{
    private static DateTime currentDate;

    private static long identity;

    private static readonly object locker = new object();

    public static string Generate()
    {
        lock (locker)
        {
            if (currentDate != DateTime.Today)
            {
                currentDate = DateTime.Today;
                identity = 1;
            }
            identity++;
            return String.Format("{0:yyyyMMdd}{1:########}", currentDate, identity);
        }
    }
}

这个类应该能生成16位唯一ID,但要求这个类只能部署在一台服务器上,不可集群

如果你的服务器会挂掉,请随时把currentDate和identity找个可持久化的地方(数据库、文件系统之类的)保存起来

如果你的服务器会集群,请找一台服务器专门负责这个类,然后用WebService或者RPC或者随便什么的方法集中调用,切不可在多台服务器上部署这功能

Gray Zhang | 园豆:17610 (专家六级) | 2010-04-11 12:19
客户有可能是一台服务器,也可能是几台啊
你认为不同客户端文件重名没问题,那么这个部署在客户端用 如果有问题,则部署在服务器端,客户端WebService访问获取文件名
支持(0) 反对(0) Gray Zhang | 园豆:17610 (专家六级) | 2010-04-11 20:45
0

最简单的方式是使用时间格式(yyyyMMddmmss)

蓝之风 | 园豆:391 (菜鸟二级) | 2010-04-11 23:35
0

如果仅仅是想进行缓存(空间换时间)的话,可能你的逻辑搞复杂了。生成某xml作为数据库数据计算后的结果缓存,在有效期内不经计算直接返回该xml。可设定固定的过期时间,一旦超过该时间就重新生成该xml,而不管数据库是否发生了变化。这样做的好处是系统间关联小,缓存文件不用关心数据库的业务逻辑,只是简单对时间进行监控;风险是,会发生一定的不同步情况。

作为变态手段,可在数据库发生修改时强制生成该文件,那么就可以免除不同步的困扰,同时过期时间变为无限期。缺点是,对数据库发生变化的事件监听要求过于苛刻。

陛下 | 园豆:3938 (老鸟四级) | 2010-04-13 17:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册