sqlite上的无模式数据库
sqlite-schemaless的Python项目详细描述
sqlite无模式数据库
=====
sqlite之上的无模式数据库。我基于[this uber engineering post](https://eng.uber.com/schemalespart one/)中描述的数据存储设计了“sqlite无模式”。所有数据都存储在单个sqlite数据库中,该数据库可以在磁盘上,也可以在内存中。
键空间可能类似于“用户”或“tweets”。在每个键空间中都有**行**。行由整数“row_key”标识,由一个或多个命名列组成。在这些列中,您可以存储任意json blob。所以:
*keyspace1:
*row1:
*columna:{任意json数据}
*columnb:{more json数据}
*row2:
*columna:{json数据}
*columnc:{json数据}
*row3:
*columna:{json数据}
*columnb:{json数据}
很有趣。不过,随着**二级索引**和**事件发送器**的加入,事情变得有趣起来。
二级索引
-------
您可以对存储在json列数据中的值创建索引。假设我们正在“user”列中存储用户数据。此用户数据的结构大致如下:
``javascript
{
`name':'charles',
`username':'coleifer',
`location':{
`state':'ks',
`city':'lawrence',
}
````
如果我们想按用户的状态进行搜索,我们将在`$.location.state`.
'$.username')
state廑idx=index('user','$.location.state')
'位置':{'city':'lawrence','state':'ks'},
},
社交网站=[
{'name':'github','username':'coleifer'},
{'name':'twitter','username':'coleifer'},
])
我们可以写:
ks-users=state-idx.query('ks')
对于ks-users中的行:
打印行['user']['username']
````
此功能允许您在创建或更新新行时绑定处理程序以执行代码。您可以将处理程序绑定到单个键空间或所有键空间。
例如,让我们添加一个简单的处理程序,以便在添加或更新用户名时打印用户名。
``python
@users.handler
def print懔username(row,column,值):
如果column==“user”:
打印值[“username”]
````
每当我们在“users”键空间中添加或更新行的“user”列时,回调将触发并打印用户名。
=====
sqlite之上的无模式数据库。我基于[this uber engineering post](https://eng.uber.com/schemalespart one/)中描述的数据存储设计了“sqlite无模式”。所有数据都存储在单个sqlite数据库中,该数据库可以在磁盘上,也可以在内存中。
键空间可能类似于“用户”或“tweets”。在每个键空间中都有**行**。行由整数“row_key”标识,由一个或多个命名列组成。在这些列中,您可以存储任意json blob。所以:
*keyspace1:
*row1:
*columna:{任意json数据}
*columnb:{more json数据}
*row2:
*columna:{json数据}
*columnc:{json数据}
*row3:
*columna:{json数据}
*columnb:{json数据}
很有趣。不过,随着**二级索引**和**事件发送器**的加入,事情变得有趣起来。
二级索引
-------
您可以对存储在json列数据中的值创建索引。假设我们正在“user”列中存储用户数据。此用户数据的结构大致如下:
``javascript
{
`name':'charles',
`username':'coleifer',
`location':{
`state':'ks',
`city':'lawrence',
}
````
如果我们想按用户的状态进行搜索,我们将在`$.location.state`.
'$.username')
state廑idx=index('user','$.location.state')
'位置':{'city':'lawrence','state':'ks'},
},
社交网站=[
{'name':'github','username':'coleifer'},
{'name':'twitter','username':'coleifer'},
])
我们可以写:
ks-users=state-idx.query('ks')
对于ks-users中的行:
打印行['user']['username']
````
此功能允许您在创建或更新新行时绑定处理程序以执行代码。您可以将处理程序绑定到单个键空间或所有键空间。
例如,让我们添加一个简单的处理程序,以便在添加或更新用户名时打印用户名。
``python
@users.handler
def print懔username(row,column,值):
如果column==“user”:
打印值[“username”]
````
每当我们在“users”键空间中添加或更新行的“user”列时,回调将触发并打印用户名。