有没有人使用过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
質問者はデータベースの仕組みを誤解しているようです。データベースは、単に配列を保存して使用時に配列を並べ替えたり、 100 から 150 までの の data
次数を見つける代わりに、データを整理するために dateline
バランス ツリーdesc
データ構造をよく使用します。 (この制限を誤解している可能性があります)、すべてのデータを読み取るのではなく、バランスの取れたツリーを検索してサイズ 150 の左端のサブツリーを見つけ、このサブツリーから右のサブツリーで name = 'a'
のノードを見つけます。そしてこのノードのデータを取り出します。これはデータベースの単純な原理です。実際、データベースはデータの一部を外部記憶装置に保存し、これを検索する場合にメモリ内の外部記憶領域の 一条
インデックスを作成します。外部記憶装置上のデータがメモリに読み込まれ、バランス ツリーが構築され、このバランス ツリー上で検索が実行されます。データを整理するデータベースの実装です。
mysql でのこのクエリ文の実行時間は非常に短いですが、すべてのデータを取得しようとすると、やはり時間がかかります。
最後に、質問者が実装した関数がまだ理解できません。理解できないのは、1. データはデータベースから読み取られるのか、それとも単にファイルに保存されるのかということです。2. トラバースする必要があるかどうか。すべてのデータ たとえば、すべてのデータを表示する必要があるか、すべてのデータを他のファイルに保存する必要があります。実際、速度を制限するボトルネックはプログラミング言語、オペレーティング システムなどです。