搜尋

首頁  >  問答  >  主體

node.js - leveldb排序问题

有没有人使用过leveldb?我是在nodejs环境下使用的https://www.npmjs.com/package...

网上搜了资料,感觉还是挺少。更不用说用的人了。
不过没有关系,即使没用过,我下面的问题也可以看看。

我现在面临的问题就是。测试数据一百万左右。如果单独根据key查找,那是非常快速的。

但是我现在需要完成类似于这样的功能


    where name='a' order by dateline desc limit 100,50

无论怎样,你都必须得从数据库里面读取完所有的记录,然后再进行排序,然后再截取对应的数据段。

然而,光遍历读取所有的记录,100万条数据,花了4分钟,这个速度明显不能用于实际生产了。

我不明白mysql这种100万条数据,实现上面的sql应该是不到1秒的时间吧?他们到底怎么弄的。
有什么思路吗?

ringa_leeringa_lee2780 天前612

全部回覆(1)我來回復

  • 天蓬老师

    天蓬老师2017-04-17 15:01:18

    我覺得題主理解錯了資料庫的工作方式。資料庫經常採用一種平衡樹的數據結構進行組織數據,而不是單純存儲一個數組用的時候對這個數組進行排序,從data中找到按照datelinedesc順序的100到150(這個限制我可能理解有誤),並不是將所有的資料都讀一遍,而是從對平衡樹進行查找,找到最左下面的大小為150的子樹,然後從這個子樹的右子樹找name = 'a'的節點,然後取出該節點的資料。這是資料庫簡單的原理,實際上資料庫會將部分資料放在外部儲存設備,然後在記憶體中建立這個外部儲存區域的一条索引,如果進行查找時找的是這個索引,那就會將外部儲存裝置上的這塊資料讀到記憶體中,建立一個平衡樹,在這個平衡樹上進行查找。這是資料庫的一種組織資料的實作。

    mysql中這條查詢語句執行時間很短,但如果是取得所有的數據,也是會花費很長時間的。

    最後,我還是不明白題主實現的功能,不明白的地方在於:1,資料是從資料庫中讀取的,還是只是在檔案中儲存著;2,如果遍歷所有的資料是必須的,例如:必須顯示所有資料或必須將所有資料存到其他的某個檔案中,那實際上限制速度的瓶頸是程式語言,作業系統等等。

    回覆
    0
  • 取消回覆