有没有人使用过leveldb?我是在nodejs环境下使用的https://www.npmjs.com/package...
网上搜了资料,感觉还是挺少。更不用说用的人了。
不过没有关系,即使没用过,我下面的问题也可以看看。
我现在面临的问题就是。测试数据一百万左右。如果单独根据key查找,那是非常快速的。
但是我现在需要完成类似于这样的功能
where name='a' order by dateline desc limit 100,50
无论怎样,你都必须得从数据库里面读取完所有的记录,然后再进行排序,然后再截取对应的数据段。
然而,光遍历读取所有的记录,100万条数据,花了4分钟,这个速度明显不能用于实际生产了。
我不明白mysql这种100万条数据,实现上面的sql应该是不到1秒的时间吧?他们到底怎么弄的。
有什么思路吗?
天蓬老师2017-04-17 15:01:18
我覺得題主理解錯了資料庫的工作方式。資料庫經常採用一種平衡樹的數據結構進行組織數據,而不是單純存儲一個數組用的時候對這個數組進行排序,從data
中找到按照dateline
的desc
順序的100到150(這個限制我可能理解有誤),並不是將所有的資料都讀一遍,而是從對平衡樹進行查找,找到最左下面的大小為150的子樹,然後從這個子樹的右子樹找name = 'a'
的節點,然後取出該節點的資料。這是資料庫簡單的原理,實際上資料庫會將部分資料放在外部儲存設備,然後在記憶體中建立這個外部儲存區域的一条
索引,如果進行查找時找的是這個索引,那就會將外部儲存裝置上的這塊資料讀到記憶體中,建立一個平衡樹,在這個平衡樹上進行查找。這是資料庫的一種組織資料的實作。
mysql中這條查詢語句執行時間很短,但如果是取得所有的數據,也是會花費很長時間的。
最後,我還是不明白題主實現的功能,不明白的地方在於:1,資料是從資料庫中讀取的,還是只是在檔案中儲存著;2,如果遍歷所有的資料是必須的,例如:必須顯示所有資料或必須將所有資料存到其他的某個檔案中,那實際上限制速度的瓶頸是程式語言,作業系統等等。