二百分求一数据操作,谁的执行效率高得一百分,其余分摊.不够分再加(我只有一千分),思归,孟子,高手对自己的挑战

swzlxm 2004-10-20 05:21:07
我以下说的这种情况有点类似代码编辑器里的自动识别;


现有几万甚至十几万词条(相当于标题),每个词条有词条内容(一篇文章),现在要做的就是把内容里含有词条(不是一篇文章的标题,是所有文章的标题)的文字替换为链接

***简单的说就是所有文本里含有所有标题(任意一个)的相应文字替换为链接.***

现不要求添加文章的时候立即把含有某个标题的文字换为链接,只需作定时整个清理(词条是不断增加的,增加一个就有新的链接出现).执行时间是可想而知的.一个一个对比替换四千条就要N个小时;

我想肯定是有好的方法,比如代码编辑器的方法,放在词库里???????,但是也不知怎么去比较.替换.

请各位高手发言,能有完整解决方案最好


例子如下:

词条标题:词条1

词条内容:这里是<A href=''>词条1</A>,其它见<A>词条2</A>,其它见<A>词条3</A>

词条2

........


词条3
........

...全文
859 86 打赏 收藏 转发到动态 举报
写回复
用AI写文章
86 条回复
切换为时间正序
请发表友善的回复…
发表回复
firsthui 2004-10-25
  • 打赏
  • 举报
回复
掌握大海的人,才能征服世界
Yang_ 2004-10-25
  • 打赏
  • 举报
回复
磨刀不误砍柴功

哎,不说了
swzlxm 2004-10-25
  • 打赏
  • 举报
回复
与此对应的两个表还有两个完全复制,作临时使用
lglesias 2004-10-25
  • 打赏
  • 举报
回复
up
swzlxm 2004-10-25
  • 打赏
  • 举报
回复
表的结构上面回复中已经说了.

主要涉脉及两个表,一个标题(还有其它一些字段),一个内容,再建一表已成必然之势.

现在的问题更新一条都很慢,
swzlxm 2004-10-25
  • 打赏
  • 举报
回复
是不是数据库方面的牛人不逛.NET区?

还是要到数据库区发一个帖子,可惜数据库区我只能发一百分的
帖子

实在不愿因为技术达不到要求与客户商讨,这不是程序员的作风
swzlxm 2004-10-25
  • 打赏
  • 举报
回复
谢谢: Yang_(扬帆破浪) 回复这么多.

----------------------------------------------------------

至此为为此,上面的回复虽说没有完全解决问题,但有些回复还是建议性很高,非常谢谢;


若CSDN上有人能将重要环节的操作在几个小时内完成,我愿倾我所有可用分.
swzlxm 2004-10-24
  • 打赏
  • 举报
回复

回复人: Yang_(扬帆破浪) ( ) 信誉:100
----
当然是一次UPDATE了,但是你总得取出词条标题啊,然后放在变量里一次更新,比如说从得到的十条记录里取词条标题,用SQL不是一条一条取么,难道还有更好的办法,请指教...


我使用以下(这是更新一条词条内容的操作):
declare cur_Entry cursor for select EntryId,Entry_tw from PE_Entry where charindex(Entry_tw,@EntryText)>0
open cur_Entry
fetch cur_Entry into @id2,@Entry_tw

while(@@fetch_status=0)
begin
set @UP_EntryText=replace(@UP_EntryText,@Entry_tw,@Entry_tw)
fetch cur_Entry into @id2,@Entry_tw
end
update PE_EntryText set EntryText=@UP_EntryText where EntryId=@id1
xinshaw 2004-10-24
  • 打赏
  • 举报
回复
我觉得在目标表A中先用触发器,将新添加或修改的记录插入到另外一张结构一模一样的表B中,然后定时更新这张表B中的内容,同时更新原表A中的内容,更新完了就从表B中删除这条记录,这个工作可以交给存储过程和作业来做。

主要思路是:触发器,作业,存储过程。
dan83 2004-10-24
  • 打赏
  • 举报
回复
帮顶
wardance 2004-10-24
  • 打赏
  • 举报
回复
我的想法是这样的,可以叫做“两手准备”算法,呵呵

1.首先,建一个词条集合Old_titles,这个集合我们能操作的速度越快越好,最好能全部放在缓存中,十几万条,如果在服务器上几G内存也差不多。
2.增加一个文章A 的时候,从old_titles中查,如果发现这A中有Old_titles中的标题,那好,替换成链接。加进数据库,这是一手准备。
3.这样Old_titles集合已经不是实际new_titles集合了,显然,new_titles-old_titles=A;把A加入到另一个集合Unhandled_titles。
4,如果系统取了Old_titles集合中的文章怎么办?那么,在显示的时候,一查文章是Old_titles中的,系统自动查询Unhandled_titles集合,加上链接,并不更新数据库。这是显示的时候加链接,另一手准备。
5.按上法,如果时间长了,Unhandled_titles会越来越大,这样第4步执行起来速度会慢很多。
这样就可以每一段时间t来根据Unhandled_titles来更新Old_titles,然后Unhandled_titles就可以赋为空了。

个人想法
hardway2003 2004-10-24
  • 打赏
  • 举报
回复
进来就是为了学习
caesarls 2004-10-24
  • 打赏
  • 举报
回复
帮你顶
Yang_ 2004-10-24
  • 打赏
  • 举报
回复
干脆把你的表结构说清楚,这样讨论太费劲
Yang_ 2004-10-24
  • 打赏
  • 举报
回复
应该可以不用游标的(仔细考虑可能还需要调整,具体的主要是replace函数里面需要调整)

update PE_Entry
set Entry_tw=replace(a.Entry_tw,t.EntryText,'<A href='''''+t.EntryText+'</A>')
from PE_Entry a,#t t
where charindex(a.Entry_tw,t.EntryText)>0

--#t放你需要更新的EntryText的临时表
lqy169 2004-10-24
  • 打赏
  • 举报
回复

为什么不考虑数据库的全文索引技术?应该能满足你的需求
czhenq 2004-10-23
  • 打赏
  • 举报
回复
个人觉得还是应该将任务进行分解,为什么一定要十天、半个月才替换一次??

为什么不每天替换一次呢??

czhenq 2004-10-23
  • 打赏
  • 举报
回复
这个问题涉及到sql server运行性能

我觉得可以去sql版问”邹健“老大
morality 2004-10-23
  • 打赏
  • 举报
回复
呵呵,帮你顶!静待高手发言!
swzlxm 2004-10-23
  • 打赏
  • 举报
回复
使不使用触发器,跟性能无关.

我也想过在插入的时候搞定(最少替换到上一次清理的位置),以后清理的时候只清上一次清理之后加的词条(上一次清理时间-----GETDATA()区间的词条标题,但仍然要对所有词条内容更新)

---------------------------------
但在插入的时候,哪怕是等一分钟都是无法忍受的)
---------------------------------
或者可每天清理当天加的词条,可避免插入等待,一天一次小清理,十天或者一个月一次大清理(大清理仍不用清理以前清理过的)


---------------------
另:我以为是十几万条,但现在可能几百万条(对百科全书来说,几百万,几千万都算正常)



大家继续讨论,在这里先不说多CPU,数据分磁盘存储..............
应该先在软件上先作决定.
加载更多回复(66)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧