• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            那誰(shuí)的技術(shù)博客

            感興趣領(lǐng)域:高性能服務(wù)器編程,存儲(chǔ),算法,Linux內(nèi)核
            隨筆 - 210, 文章 - 0, 評(píng)論 - 1183, 引用 - 0
            數(shù)據(jù)加載中……

            [算法]如何根據(jù)數(shù)據(jù)的多種屬性來(lái)查找數(shù)據(jù)

            今天下午,使用新浪微博的查找好友功能查找好友時(shí),突然想起這樣的一個(gè)功能,應(yīng)該說(shuō)這個(gè)問(wèn)題我之前也考慮過(guò),但是一直沒(méi)有很好的答案,這里做一個(gè)描述.

            其實(shí)問(wèn)題說(shuō)白了也很簡(jiǎn)單,查找好友的時(shí)候,可以根據(jù)用戶的一個(gè)或者多個(gè)屬性來(lái)定位數(shù)據(jù).比如一個(gè)用戶有用戶名,性別,地址三個(gè)屬性,如何做到可以根據(jù)其中的一個(gè)或者多個(gè)屬性來(lái)定位用戶呢?

            首先來(lái)看存儲(chǔ)端的設(shè)計(jì),我個(gè)人認(rèn)為這個(gè)功能雖然可能用的次數(shù)不多,但是不應(yīng)該是直接去訪問(wèn)查找數(shù)據(jù)庫(kù)的,否則量如果大了起來(lái)響應(yīng)會(huì)很慢.好了,如果不是直接查找數(shù)據(jù)庫(kù)的話,那么擋在數(shù)據(jù)庫(kù)前面應(yīng)該有cache服務(wù)器了.第二個(gè)問(wèn)題來(lái)了,cache總是有限的,不能緩存所有的數(shù)據(jù),那么在這里查找就可能會(huì)丟失一些數(shù)據(jù),這個(gè)問(wèn)題又怎么解決呢?嗯,我個(gè)人的猜測(cè)是,這里有一個(gè)平衡點(diǎn)的問(wèn)題,即有一個(gè)準(zhǔn)則,比如說(shuō)經(jīng)常登錄的活躍用戶信息才會(huì)留在cache中,不常訪問(wèn)的用戶,找不到也不打緊了.

            接下來(lái),如果數(shù)據(jù)真的在cache中,即使如此,那么要實(shí)現(xiàn)這里提到的可以根據(jù)多個(gè)屬性來(lái)查找數(shù)據(jù)也不是很容易實(shí)現(xiàn)的.

            現(xiàn)在大部分的cache系統(tǒng),比如memcached,還有我之前寫(xiě)的ccache,本質(zhì)上都是key-value形式的cache,也就是僅能針對(duì)一個(gè)key值進(jìn)行搜索查找.

            考慮如下的兩種實(shí)現(xiàn):
            1) 緩存中數(shù)據(jù)key是用戶名,而value是用戶的其它信息如性別,城市,主頁(yè)等,那么這里就存在一個(gè)key值不唯一的問(wèn)題.好了,如果把所有相同key值的數(shù)據(jù)組織在一起,比如用一個(gè)鏈表串起來(lái),如果找到這個(gè)用戶名,再遍歷這個(gè)鏈表根據(jù)其余的參數(shù)來(lái)定位數(shù)據(jù).但是,如果用戶不是根據(jù)用戶名也就是key值來(lái)查找數(shù)據(jù)的,如何是好呢?難道說(shuō),要建立一個(gè)多key的數(shù)據(jù)結(jié)構(gòu)用于查找,就我現(xiàn)在對(duì)cache設(shè)計(jì)的了解,還沒(méi)有這種多key設(shè)計(jì)的cache,基本上都是單key的cache.

            2) 緩存中數(shù)據(jù)key不僅包括用戶名,還包括了其它可以定位到用戶的屬性,也就是,與前面的實(shí)現(xiàn)不同的是,這個(gè)實(shí)現(xiàn)把多個(gè)屬性都放在key里面了.但是,如果這樣組織數(shù)據(jù),又如何定位數(shù)據(jù)呢?假設(shè)key里面有三個(gè)屬性,某次使用了其中的一個(gè)屬性來(lái)查找,下一次使用其中的兩個(gè)屬性來(lái)查找....這種設(shè)計(jì)實(shí)現(xiàn)起來(lái)還是很難的.

            以上幾個(gè)問(wèn)題,我今天考慮了一下,沒(méi)有太好的思路,這也越發(fā)激起我去研究數(shù)據(jù)庫(kù)實(shí)現(xiàn)的想法.疑問(wèn)未除,做個(gè)紀(jì)念.


            =========== 分割線 ==================
            這個(gè)問(wèn)題似乎我想的復(fù)雜了,問(wèn)了一下朋友,說(shuō)是應(yīng)該直接搜索數(shù)據(jù)庫(kù),因?yàn)橐话氵@樣的搜索量不會(huì)很多.




            posted on 2009-10-23 20:11 那誰(shuí) 閱讀(5102) 評(píng)論(4)  編輯 收藏 引用 所屬分類: 算法與數(shù)據(jù)結(jié)構(gòu) 、服務(wù)器設(shè)計(jì)

            評(píng)論

            # re: [算法]如何根據(jù)數(shù)據(jù)的多種屬性來(lái)查找數(shù)據(jù)  回復(fù)  更多評(píng)論   

            按照數(shù)據(jù)庫(kù)實(shí)現(xiàn),應(yīng)該是數(shù)據(jù)存儲(chǔ)起來(lái),然后分別建立不同的索引吧.索引做的復(fù)雜了,就是搜索引擎了 :)
            2009-10-23 22:00 | dogstar

            # re: [算法]如何根據(jù)數(shù)據(jù)的多種屬性來(lái)查找數(shù)據(jù)  回復(fù)  更多評(píng)論   

            一般都會(huì)按照 ID和用戶名做key的

            你那個(gè)需求 直接查找數(shù)據(jù)庫(kù)好點(diǎn)
            2009-10-27 15:12 | wangfan1985@gmail.com

            # re: [算法]如何根據(jù)數(shù)據(jù)的多種屬性來(lái)查找數(shù)據(jù)  回復(fù)  更多評(píng)論   

            分層索引呢 相當(dāng)于key值查找key值,最后查找到數(shù)據(jù)
            2012-06-07 15:37 | hai

            # re: [算法]如何根據(jù)數(shù)據(jù)的多種屬性來(lái)查找數(shù)據(jù)  回復(fù)  更多評(píng)論   

            這個(gè)可以用多叉樹(shù)
            2013-10-21 17:49 | xiaolong
            久久青青草原亚洲av无码| 精品人妻伦一二三区久久| 少妇内射兰兰久久| 性欧美大战久久久久久久久| 久久亚洲国产精品成人AV秋霞| 久久午夜夜伦鲁鲁片免费无码影视| 日产精品久久久久久久| www.久久99| 亚洲国产精品无码久久青草 | 免费一级做a爰片久久毛片潮| 久久久久黑人强伦姧人妻| 国内精品久久久久影院薰衣草 | 久久精品国产99久久久| 岛国搬运www久久| 久久免费看黄a级毛片| 久久久久久综合一区中文字幕| 久久亚洲中文字幕精品一区四| 亚洲精品高清国产一线久久| 久久婷婷综合中文字幕| 久久精品极品盛宴观看| 久久电影网一区| 久久精品国产色蜜蜜麻豆| 国产精品久久久久久久久久免费| 久久只有这精品99| 丁香狠狠色婷婷久久综合| 欧美亚洲国产精品久久高清| 91久久精品国产91性色也| 一本色道久久综合狠狠躁| 91久久香蕉国产熟女线看| 亚洲伊人久久精品影院 | 久久国产欧美日韩精品| 亚洲第一永久AV网站久久精品男人的天堂AV| 久久综合亚洲欧美成人| 久久婷婷五月综合成人D啪| 久久人妻少妇嫩草AV无码专区| 模特私拍国产精品久久| 久久精品国产只有精品66| 国产精品久久久久9999| 国内精品人妻无码久久久影院导航| 久久久WWW成人| 国产福利电影一区二区三区久久老子无码午夜伦不 |