none
如何设计搜索引擎数据库 RRS feed

  • 问题

  • 需要设计一个搜索引擎数据库用于存放一些文章的信息及关键字,一旦有文章更新则更新文章中的信息及关键字段,搜索引擎在内存中完成所有的文章关键字段搜索,并且在此期间不允许有其他的操作,比如说文章的更新等等。
    在此列出两个表:
    Info Table
    Document ID Key max 10-digit integer
    Search ID max 10-digit integer
    Symbol varchar(?) stock symbol
    Country varchar(3)
    PID varchar(?) performance ID
    Sector Code max 5-digit integer
    Ind Code max 10-digit integer industry code
    Language varchar(2)
    Report Year max 4-digit integer
    Report Quarter max 1-digit integer
    Call Date varchar(10) “yyyy/mm/dd”
    Editor ID 5-digit integer

    Words Table:
    WordID          int identity
    Word            varchar(30)  ?
    TranscriptID    int          referenced TranscriptID from Info Table


    Info Table:用于存放文章的基本信息,Words Table用于存放文章的关键字段。
    假定关键字段如下: stock market quote price exchange,Mutual Fund, Hedge Fund, ETF Investment Research这些字段将存储在Words Table,并且有一个DocumentID与Info Table进行关联。
    1.Words Table中列可能非常多,过亿后数据查询性能将非常低,该如何设计。(SQL版本为标准版)
    2.关键字如何存储比较好,比如stock market quote price exchange是否需要进行拆分为单个的单词来存储,还是保存为短语比较好?另外,如果使用全文索引,性能如何?
    3.搜索期间不允许其他的操作,使用何种锁,事物级别更好?
    2010年1月22日 9:04

答案

  • 1.分区表,全文检索
    2.全文检索
    3.没有必要做这个限制。

    如果查询时候不要更新 那么查询的锁的优先级就要高于update的,这个就会导致一个结果,每次你只能有一个查询在进行。。。这个当然不会是你想要的结果。。。

    所以你可以设置一个标记,告诉update系统,你现在有人在查询,等没人查询的时候(半夜?)在去update。


    family as water
    2010年1月23日 8:44

全部回复

  • 1.分区表,全文检索
    2.全文检索
    3.没有必要做这个限制。

    如果查询时候不要更新 那么查询的锁的优先级就要高于update的,这个就会导致一个结果,每次你只能有一个查询在进行。。。这个当然不会是你想要的结果。。。

    所以你可以设置一个标记,告诉update系统,你现在有人在查询,等没人查询的时候(半夜?)在去update。


    family as water
    2010年1月23日 8:44
  • 查询的时候不要更新,不需要查询锁的优先级高于update呀。
    有shared lock的时候本来就没法update的。


    想不想时已是想,不如不想都不想。
    2010年1月23日 17:17
    版主
  • 搜索引擎一般不使用数据库,原因是速度跟不上。建议你看一看搜索引擎的专业书籍和论文。
    2010年1月26日 2:41
  • 谢谢,已经搞清楚了,是要做一些搜索的索引全部Load到内存中区,这个数据库仅当掉电后从新Load上去。
    2010年1月26日 6:04