【问题标题】:Maintaining the ranking order in continuously updating database [duplicate]在不断更新数据库中保持排名顺序[重复]
【发布时间】:2014-01-05 18:04:43
【问题描述】:

假设数据库表的每一行都包含有关搜索词的信息。该表有一个整数“排名”列来指示搜索词在网站上的显示顺序。

我如何最好地实施和维护这个排名顺序?

我要避免的问题是术语编号为 1,2,3,4,..,100,例如,当排名 50 突然变得有趣时,它将其新排名设置为 1,然后它们之间的所有术语必须将它们的排序号加一。

当然,将初始排序编号设置为 100、200、300、400 等会留下一些移动空间,但在某些时候它会中断。

另一种方法可以用一些固定的偏移量来间隔排列,但在现实世界的场景中它也可能会在某个时间中断。

所以有没有其他不同的方法来处理这个...... (这可能与搜索引擎如何保持排名和重新排序有关,但我找不到任何运气)

【问题讨论】:

  • 不能认为是重复,这个问题是关于大型数据库中频繁更新行的相对独立等级。该排名字段中的所有数据都是完全独立的,可以根据系统需要(以防万一搜索算法)。 **没有其他列在索引/排名结果方面发挥任何作用**
  • @Jitendra 你已经解决了这个问题吗?

标签: mysql database database-design search-engine code-search-engine


【解决方案1】:

这个想法怎么样。喜欢排队。

创建附加表Task(id, new_rank, ...)。 在插入时为主表创建触发器。

当新行即将插入主表时,请执行以下操作:

  1. 不允许在 man 表中插入新行;
  2. Task 表中插入新行。

例如每小时运行一次存储过程:

  1. 选择光标处Task表中的所有新行;
  2. 循环中:

    2.1。在主表中运行增加(准备)排名(能够插入新的行排名值);

    2.2。在 man 表中插入新行;

    2.3。从Task 中删除行。

也许你需要在交易中做 2.1-2.3 的项目。

【讨论】:

  • 如果数据是多GB,它可能无法正常工作。我不知道为什么,但有些傻瓜编辑了我的问题以获得完全不同的答案。我讨厌关于 Stackoverflow 的这种非 aprooval 的事情,这让我很生气,因为不知道我的问题的人会改变我的问题并离开!!!
  • @Jitendra 你可以在这里看到谁编辑了你的消息http://stackoverflow.com/posts/20937158/revisions。你也可以在这里联系支持http://stackoverflow.com/contact
  • 谢谢...谢谢您的回答。我最初的问题是在搜索引擎排名的背景下,如果排名变化由递归更新处理,数百万条记录将被更改......
猜你喜欢
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 2010-10-15
  • 2016-02-24
相关资源
最近更新 更多