Pilosa支持默認使用JSON
的HTTP
接口。
任何HTTP工具均可用於與Pilosa
服務器進行交互。 本文檔中的示例將使用curl
,默認狀況下可用於許多類UNIX系統,包括Linux和MacOS。 Windows用戶能夠在這裏下載curl。node
請注意,Pilosa服務器對打開文件的上限有要求。 檢查系統文檔,瞭解如何在達到該限制時增長它。 有關詳細信息,請參閱Open File Limits。git
按照安裝文檔中的步驟安裝Pilosa。 在終端中執行如下命令,以使用默認配置運行Pilosa(Pilosa將在localhost:10101中可用):github
pilosa server
若是您使用的是Docker鏡像,則可使用如下命令在默認地址上運行短暫的Pilosa容器:docker
docker run -it --rm --name pilosa -p 10101:10101 pilosa/pilosa:latest
確保Pilosa正在運行:編程
curl localhost:10101/status
{"state":"NORMAL","nodes":[{"id":"91715a50-7d50-4c54-9a03-873801da1cd1","uri":{"scheme":"http","host":"localhost","port ":10101},"isCoordinator":true}],"localID":"91715a50-7d50-4c54-9a03-873801da1cd1"}
爲了更好地理解Pilosa
的功能,咱們將建立一個名爲Star Trace
的示例項目,其中包含有1000
個流行的Github存儲庫的信息,這些存儲庫名稱中包含go
。Star Trace
索引將包括數據點,例如編程語言,標籤和star者(已經爲項目加星標的人)。json
儘管Pilosa
沒有以表格形式保存數據,但在描述數據模型時咱們仍然使用術語列
和行
。咱們將主對象放在列中,並將這些對象的屬性放在行中。
例如,Star Trace
項目將包含一個名爲repository
的索引,其中包含表示Github存儲庫的列
,以及表示編程語言
和標籤
等屬性的行。咱們能夠經過將行分組爲名爲Fields
的集合來更好地組織行。所以,repository
(存儲庫)索引可能具備languages
(語言)字段以及tags
(標籤)字段。您能夠在文檔的Data Model(數據模型)部分中瞭解有關索引和字段的更多信息。bash
注意:若是您想在任什麼時候候驗證數據結構,能夠按以下方式請求架構:服務器
curl localhost:10101/schema
{"indexes":null}
在咱們在導入數據或運行查詢以前,須要建立索引及其中的字段。 下面先建立存儲庫索引:
下面命令成功的建立一個名爲repository
的索引數據結構
curl localhost:10101/index/repository -X POST
{"success":true}
接下來建立一個stargazer
字段,該字段的行內容(數據)爲star者的用戶ID
curl localhost:10101/index/repository/field/stargazer \ -X POST \ -d '{"options": {"type": "time", "timeQuantum": "YMD"}}'
{"success":true}
因爲咱們的數據包含時間戳,這些時間戳表明用戶start
的時間,所以咱們將字段類型設置爲time
。timeQuantum
(時間量)是咱們想要使用的時間分辨率,咱們將其設置爲star
的YMD
(年月日)。
接下來建立language
字段,其行(數據)中包含編程語言的ID
curl localhost:10101/index/repository/field/language \ -X POST
{"success":true}
language
是一個set
(集合)字段,但因爲默認字段類型是set
,所以咱們未在字段選項中指定它。
下載stargazer.cvs
和language.cvs
文件
curl -O https://raw.githubusercontent.com/pilosa/getting-started/master/stargazer.csv curl -O https://raw.githubusercontent.com/pilosa/getting-started/master/language.csv
運行下面的命令將數據導入到Pilosa
pilosa import -i repository -f stargazer stargazer.csv pilosa import -i repository -f language language.csv
若是您正在使用Pilosa
的Docker
容器(名爲pilosa
),則應將* .csv
文件複製到容器中,而後導入它們
docker cp stargazer.csv pilosa:/stargazer.csv docker exec -it pilosa /pilosa import -i repository -f stargazer /stargazer.csv docker cp language.csv pilosa:/language.csv docker exec -it pilosa /pilosa import -i repository -f language /language.csv
請注意,用戶ID(user IDs)和存儲庫ID(repository IDs)都從新映射到順序整數存在數據文件中,它們再也不與實際的Github ID
相對應。 您能夠查看languages.txt以查看語言的映射。
star
了那些repository
(存儲庫)curl localhost:10101/index/repository/query \ -X POST \ -d 'Row(stargazer=14)'
{ "results":[ { "attrs":{}, "columns":[1,2,3,362,368,391,396,409,416,430,436,450,454,460,461,464,466,469,470,483,484,486,490,491,503,504,514] } ] }
curl localhost:10101/index/repository/query \ -X POST \ -d 'TopN(language, n=5)'
{ "results":[ [ {"id":5,"count":119}, {"id":1,"count":50}, {"id":4,"count":48}, {"id":9,"count":31}, {"id":13,"count":25} ] ] }
star
了哪些repository
(存儲庫)curl localhost:10101/index/repository/query \ -X POST \ -d 'Intersect( Row(stargazer=14), Row(stargazer=19) )'
{ "results":[ { "attrs":{}, "columns":[2,3,362,396,416,461,464,466,470,486] } ] }
star
了哪些repository
(存儲庫)curl localhost:10101/index/repository/query \ -X POST \ -d 'Union( Row(stargazer=14), Row(stargazer=19) )'
{ "results":[ { "attrs":{}, "columns":[1,2,3,361,362,368,376,377,378,382,386,388,391,396,398,400,409,411,412,416,426,428,430,435,436,450,452,453,454,456,460,461,464,465,466,469,470,483,484,486,487,489,490,491,500,503,504,505,512,514] } ] }
curl localhost:10101/index/repository/query \ -X POST \ -d 'Intersect( Row(stargazer=14), Row(stargazer=19), Row(language=1) )'
{ "results":[ { "attrs":{}, "columns":[2,362,416,461] } ] }
99999
設置爲存儲庫77777
的star
者curl localhost:10101/index/repository/query \ -X POST \ -d 'Set(77777, stargazer=99999)'
{"results":[true]}
請注意,雖然用戶ID99999
可能此列其它ID不連續
,但它仍然是一個相對較小的數字。 不要嘗試在Pilosa中使用任意64位整數
做爲列ID或行ID,這將致使諸如性能不佳和內存不足錯誤等問題。
您能夠跳轉到Data Model數據模型以深刻了解Pilosa
的數據模型
,或查詢有關PQL
(Pilosa的查詢語言Query Language)的更多詳細信息。
查看Examples示例頁面,瞭解Pilosa的實際使用樣例。看咱們不斷擴展的客戶端庫Client Libraries有沒有你喜歡的編程語言版本。