gocrud, 使用图操作来简化结构化数据的CRUD

分享于 

9分钟阅读

GitHub

  繁體 雙語
Go library to simplify CRUD of structured data using Graph operations
  • 源代码名称:gocrud
  • 源代码网址:http://www.github.com/manishrjain/gocrud
  • gocrud源代码文档
  • gocrud源代码下载
  • Git URL:
    git://www.github.com/manishrjain/gocrud.git
    Git Clone代码到本地:
    git clone http://www.github.com/manishrjain/gocrud
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/manishrjain/gocrud
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    gocrud

    使用框架简化创建。读取。更新和删除任意深度结构化数据- 使构建REST服务快速且容易。

    wercker statusGoDoc

    插件发布

    注意,主分支总是指Gocrud的最新版本,它包含了中断更改。 使用稳定版本的api,请使用通过 gopkg.in. 发布的包。

    Gocrud版本安装指令Godoc源
    英镑( 稳定)go get -v gopkg.in/manishrjain/gocrud.v1/...godoc源代码
    master ( dev )go get -v github.com/manishrjain/gocrud/...godoc源代码

    问题/支持

    我主要在freenode网络上使用 IRC。 频道是 #gocrud 我在网络上的mrjn。 freenode上的 #gocrud

    我也在 gophers.slack. com,在 #gocrud 频道。 尽管如这里,松弛并没有我工作站运行的linux客户机,因这里我更喜欢 IRC。 你可以通过以下链接获得 Join 松弛的邀请: Gopher松弛注册。 你也可以直接给我发送邮件,我的用户id是 @manishrjain

    为什么?

    礼貌:Monish,方正 karma.wiki

    构建了 3个不同的启动后端后,我认为很多时间都浪费在计算和编码数据结构的CRUD。 这里外,数据库的选择必须前进,这会导致启动创始人的头痛。 为了使CRUD易于实现,编写了 Gocrud,并在开发的任何阶段提供了对底层存储和搜索引擎的灵活支持。

    数据存储数据存储驱动程序可用状态
    LevelDB是的就绪
    MySQL是的需要实现 Iterate 功能
    PostgreSQL是的需要实现 Iterate 功能
    Cassandra是的就绪
    MongoDB是的需要实现 Iterate 功能
    Google数据存储是的需要实现 Iterate 功能
    RethinkDB是的需要实现 Iterate 功能
    亚马逊 DynamoDB不是需要工作
    数据存储用法 shows说明如何使用和初始化各种数据存储。 通过实现这里接口,可以添加对更多的支持:
    typeStoreinterface {
     Init(args.. .string)
     Commit(its []*x.Instruction) errorIsNew(subject string) boolGetEntity(subject string) ([]x.Instruction, error)
     Iterate(fromId string, num int, ch chan x.Entity) (int, error)
    }
    搜索引擎搜索引擎驱动器可用
    弹性搜索是的
    Solr不是

    可以通过实现以下接口来添加:

    typeEngineinterface {
     Init(args.. .string)
     Update(x.Doc) errorNewQuery(kind string) Query}typeQueryinterface {
     Limit(num int) QueryOrder(field string) QueryRun() ([]x.Doc, error)
     // and few others}

    框架

    这里框架是按照以下原则构建的:

    • 收费 Versioning: 跟踪对数据进行的所有编辑,包括删除操作。
    • :能够跟踪编辑了哪些人的人。
    • 保留: 删除时,仅将它的标记为已经删除。 从不删除任何数据。

    框架使得父子父子关系变得很容易,在今天的操作中非常常见。 用于 e.g.

    
    - Posts created by User (User -> Post)
    
    
    - Comments on Posts (Post -> Comment)
    
    
    - Likes on Posts (Post -> Like)
    
    
    - Likes on Comments (Comment -> Like)
    
    
    
    

    并且能够遍历这些关系并检索所有的孩子,grandchildren 等等 比如 (User -> Post -> [(Comment -> Like), Like])

    框架通过使用图操作来实现这一点,但没有使用图形数据库。 这意味着框架可以用来快速构建一个go后端来提供任意复杂的数据,同时仍然使用你的选择数据库。 请参见示例用法。

    依赖项管理

    在包中导入Gocrud的用户负责组织和维护所有依赖项,以确保代码兼容性和构建重复性。 Gocrud没有直接使用依赖管理工具( 如 Godep )。

    性能考虑

    对于示例,这就是存储在数据库中的内容:

    
    mysql> select * from instructions;
    
    
    +------------+--------------+-----------+--------------------------------------+-----------+---------------------+---------+----+
    
    
    | subject_id | subject_type | predicate | object | object_id | nano_ts | source | id |
    
    
    +------------+--------------+-----------+--------------------------------------+-----------+---------------------+---------+----+
    
    
    | uid_oNM | User | Post | NULL | wClGp | 1435408916326573229 | uid_oNM | 1 |
    
    
    | wClGp | Post | body |"You can search for cat videos here" | | 1435408916326573229 | uid_oNM | 2 |
    
    
    | wClGp | Post | tags | ["search","cat","videos"] | | 1435408916326573229 | uid_oNM | 3 |
    
    
    | wClGp | Post | url |"www.google.com" | | 1435408916326573229 | uid_oNM | 4 |
    
    
    | wClGp | Post | Like | NULL | kStx9 | 1435408916341828408 | uid_qB3 | 5 |
    
    
    | kStx9 | Like | thumb | 1 | | 1435408916341828408 | uid_qB3 | 6 |
    
    
    | wClGp | Post | Comment | NULL | 8f78r | 1435408916341828408 | uid_qB3 | 7 |
    
    
    | 8f78r | Comment | body |"Comment by on the post" | | 1435408916341828408 | uid_qB3 | 8 |
    
    
    | wClGp | Post | Like | NULL | Gyd7G | 1435408916352622582 | uid_a30 | 9 |
    
    
    | Gyd7G | Like | thumb | 1 | | 1435408916352622582 | uid_a30 | 10 |
    
    
    | 8f78r | Comment | Like | NULL | q2IKK | 1435408916357443075 | uid_I5u | 11 |
    
    
    | q2IKK | Like | thumb | 1 | | 1435408916357443075 | uid_I5u | 12 |
    
    
    | 8f78r | Comment | Comment | NULL | g8llL | 1435408916357443075 | uid_I5u | 13 |
    
    
    | g8llL | Comment | body |"Comment xv on comment" | | 1435408916357443075 | uid_I5u | 14 |
    
    
    | q2IKK | Like | Comment | NULL | oaztb | 1435408916368908590 | uid_SPX | 15 |
    
    
    | oaztb | Comment | body |"Comment kL on Like" | | 1435408916368908590 | uid_SPX | 16 |
    
    
    | 8f78r | Comment | censored | true | | 1435408916377065650 | uid_D2g | 17 |
    
    
    | kStx9 | Like | _delete_ | true | | 1435408916384422689 | uid_2a5 | 18 |
    
    
    +------------+--------------+-----------+--------------------------------------+-----------+---------------------+---------+----+
    
    
    18 rows in set (0.00 sec)
    
    
    
    

    写入是在常量时间内,每个( 实体,谓词) 构成一行。 由于每个实体的属性增长,需要读取更多行来获取实体,它是谓词,它是谓词,是子元素。 但是,对于任何标准数据,这不应该非常关注,这些数据的谓词/属性数量有限。 此外,Gocrud还通过 goroutines 并行检索所有子元素,而不是逐个检索它们。

    属性值过滤。排序。完整和部分文本匹配现在通过各种搜索引擎提供。 Gocrud提供了一个搜索界面,它提供了最常用的搜索功能。 因此,从开始就可以清楚地区分数据存储和搜索。

    保留关键字

    下列谓词由框架保留,不应由调用者使用。 目前,这个准则并不是很容易被框架所实施。

    谓词含义
    _parent_从子对象-> 父实体中存储边。
    _delete_将特定实体标记为已经删除。

    联系人

    请随时与我联系,在我的Twitter 处理为任何与这里框架相关的讨论收费。 另外,欢迎发送请求请求,欢迎 !


    数据    str  Struct  Opera  Operation  
    相关文章