调度mysql数据库数据层
FHR-DB的Python项目详细描述
fhr-db
==
灵感来源于博客文章http://backchannel.org/blog/friendfeed-schemales-mysql,fhr-db只是一个编程层,它使mysql数据库成为sql数据库。为了更好地使用mysql控制台,我跳过了一些优化。我计划在未来实现这种优化,但是需要一种用于fhr-db的phpMyAdmin,因为如果压缩了数据字段或者我们有二进制ID,mysql控制台就没用了。
——
创建应用程序时,需要创建新的数据库字段或删除某人。对于fhr db,如果您想使这些字段可搜索,只需在db中更改一些内容。使用fhr db,您只能查询索引,这可以防止编写速度较慢的应用程序,并提供了很大的灵活性。如果您有大量的数据,您可以轻松地在运行中的数据库上动态创建新索引,而不会影响性能。对于所有新的实体,对于所有旧的实体,索引将立即上升,您只需运行清理程序即可。
----
有点像谷歌的大表。如果要创建用户模型,则必须创建的表如下所示:
create table`users`(
`id`int(22)not null自动递增,
`body`text not null,
`updated`timestamp not null,
`created`timestamp not null,
primary key(`id`)
)engine=innodb default charset=utf8;
在代码中,您可以这样定义用户模型。
class user(model):
table='users'
fields={'nickname':none,'password':none,
'email':{'confirmed':false,'token':none,'email':none,'sent':false}
d获取这样的用户模型
user.set(password='another way to set sometgin')
user.set(email\u confirmed=true)
user.set(email\u token='asd',sent=true)
user.put()
print(user.get('id'))打印此保存用户的用户ID。
要获取id=10的用户,只需使用此代码
user=user.fqlget("id=%s",10)
如果用户不是none:
print(user.get('id'))\just prints out 10,然后如果找到用户
如果要查询具有昵称测试的用户,则必须创建索引。索引昵称的表如下所示:
create table`index_nickname_users`(
`id`int(22)not null auto_increment,
`nickname`varchar(64)not null,
`user_id`int(22)not null unique,
primary key(`id`),
key(`nickname`,`user_id`)
)engine=innodb default charset=utf8;
"sent":false}
index=[index(['nickname'],'index_nickname_users','user_id')]
不是唯一的用法
user=user.fklall("昵称=",test)
如果已经有用户将其昵称索引保存到数据库中,则不会生成昵称索引,因此不会出现在结果中。要建立索引,只需使用cleaner
cleaner.cleanmodel(用户)
,或者如果有多个索引用于特定索引,请使用cleaner
cleaner.cleanmODEL(用户)用户索引[0])
只需更新索引[0]。
测试驱动开发
对于质量保证,我使用测试驱动开发编码了整个FHR数据库。对于300行代码,我创建了80个测试用例,应该覆盖所有代码ATM。如果你发现了一个bug,就用这个testcase发出一个pull请求,这个请求会重现这个bug。
我们需要的是,我们也许可以从命令/clean.sh modelfile namespaceofmodel中轻松运行cleaner。只需一个命令,就可以从模型文件自动创建索引表、构建索引等。为了获得更好的性能,二进制索引和压缩的json会很酷,但为此我们需要一个数据发现工具,例如phpmyadmin for fhr db,因为mysql控制台对于二进制id或压缩的json将毫无用处。
==
灵感来源于博客文章http://backchannel.org/blog/friendfeed-schemales-mysql,fhr-db只是一个编程层,它使mysql数据库成为sql数据库。为了更好地使用mysql控制台,我跳过了一些优化。我计划在未来实现这种优化,但是需要一种用于fhr-db的phpMyAdmin,因为如果压缩了数据字段或者我们有二进制ID,mysql控制台就没用了。
——
创建应用程序时,需要创建新的数据库字段或删除某人。对于fhr db,如果您想使这些字段可搜索,只需在db中更改一些内容。使用fhr db,您只能查询索引,这可以防止编写速度较慢的应用程序,并提供了很大的灵活性。如果您有大量的数据,您可以轻松地在运行中的数据库上动态创建新索引,而不会影响性能。对于所有新的实体,对于所有旧的实体,索引将立即上升,您只需运行清理程序即可。
----
有点像谷歌的大表。如果要创建用户模型,则必须创建的表如下所示:
create table`users`(
`id`int(22)not null自动递增,
`body`text not null,
`updated`timestamp not null,
`created`timestamp not null,
primary key(`id`)
)engine=innodb default charset=utf8;
在代码中,您可以这样定义用户模型。
class user(model):
table='users'
fields={'nickname':none,'password':none,
'email':{'confirmed':false,'token':none,'email':none,'sent':false}
d获取这样的用户模型
user.set(email\u confirmed=true)
user.set(email\u token='asd',sent=true)
user.put()
print(user.get('id'))打印此保存用户的用户ID。
要获取id=10的用户,只需使用此代码
user=user.fqlget("id=%s",10)
如果用户不是none:
print(user.get('id'))\just prints out 10,然后如果找到用户
如果要查询具有昵称测试的用户,则必须创建索引。索引昵称的表如下所示:
create table`index_nickname_users`(
`id`int(22)not null auto_increment,
`nickname`varchar(64)not null,
`user_id`int(22)not null unique,
primary key(`id`),
key(`nickname`,`user_id`)
)engine=innodb default charset=utf8;
"sent":false}
index=[index(['nickname'],'index_nickname_users','user_id')]
不是唯一的用法
user=user.fklall("昵称=",test)
如果已经有用户将其昵称索引保存到数据库中,则不会生成昵称索引,因此不会出现在结果中。要建立索引,只需使用cleaner
,或者如果有多个索引用于特定索引,请使用cleaner
只需更新索引[0]。
测试驱动开发
对于质量保证,我使用测试驱动开发编码了整个FHR数据库。对于300行代码,我创建了80个测试用例,应该覆盖所有代码ATM。如果你发现了一个bug,就用这个testcase发出一个pull请求,这个请求会重现这个bug。
我们需要的是,我们也许可以从命令/clean.sh modelfile namespaceofmodel中轻松运行cleaner。只需一个命令,就可以从模型文件自动创建索引表、构建索引等。为了获得更好的性能,二进制索引和压缩的json会很酷,但为此我们需要一个数据发现工具,例如phpmyadmin for fhr db,因为mysql控制台对于二进制id或压缩的json将毫无用处。