2017-01-30 23 views
0

只是要清楚,當我說IntervalTree我指的是這個數據結構:https://en.wikipedia.org/wiki/Interval_treeIntervalTree從數據庫中查詢?

我想建立成熟的數據庫可查詢表示。我想給一個IP,檢索它的RIPE記錄。我該怎麼做呢?

我有這樣的原型在以下方式。使用https://pypi.python.org/pypi/intervaltree,解析RIPE文件,將'123.123.123.123'等IP字符串編碼爲整數,使用上述模塊構建間隔樹。

問題是,這個結構太大,不能容納在內存中。有一些適合使用的數據庫,它具有對間隔樹等內容的本地支持嗎?

回答

0

您的需求由R-Tree索引覆蓋。它們比你想象的更一般,因爲它們旨在處理多個維度。但是你可以在一個維度上實現它們,並且它們將允許有效的範圍搜索。

很多數據庫都有它們,但會稱它們爲不同的東西。例如,MySQL將其稱爲SPATIAL索引,而PostgreSQL將它們實現爲一種GiST索引。

+0

不知道我完全理解。我希望你所描述的將在MySQL上工作,就像一棵二叉樹(即簡單的數據庫索引),而不是BTREE,它就是一棵R樹。但是,從https://dev.mysql.com/doc/refman/5.7/en/creating-spatial-indexes.html看來,它似乎不起作用,因爲BTREE索引是您添加的內容在任何可以具有任何數據類型的列的頂部,而這個R-Tree的東西需要該列是一種稱爲'GEOMETRY'的特殊數據類型。我錯過了什麼? – oneloop

+0

請問您能否澄清一下如何使用這種幾何數據類型?我試圖使用'POINT',但是從https://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html#function_point看起來像'POINT's總是2維。爲了實現對IP的查詢,我期望有一些是一維的。 – oneloop

+0

@oneloop請參閱https://www.bignerdranch.com/blog/using-mysql-spatial-extensions-for-range-queries/ – btilly