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”列时,回调将触发并打印用户名。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java中的arraylist二维字符串数组   java Recyclerview继续滚动打开位置   java如何将一个EJB3.1注入另一个EJB   Android Studio(Java的)。setText方法现在使用混合参数   java查找未排序数组的顺序   在java arraylist中查找重复对象   Java支持动态方法调用吗?   java如何在onError()/取消订阅之前一直观察对象   java如何在代码中设置毕加索的背景图像   java在Spring中通过更改环境名称在属性文件之间动态切换   通过使用ldap java登录获取用户和人员列表   用户输入到GUI的java值没有保存?   java如何在创建和显示布局时设置视图的焦点?   Java小程序在图形中显示白色方块。php文件   具有独立共享变量的java同步方法   guava java:缓存数据库表,刷新1小时   Java中颜色计算器的帮助   使用socket从Java向C发送int   java使用单个JAXB注释类对复杂类型进行解组   java Android JNI错误:NoSuchMethodError:无非静态方法