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有没有你喜欢的编程语言版本。