Gem 刚撸的 InfluxDB ORM

xjz19901211 · 发布于 2017年06月11日 · 最后由 xjz19901211 回复于 2017年06月12日 · 603 次阅读
728

最近在使用 InfluxDB,没有看到啥 ORM,只有一个 palkan/influxer,看着使用方式不是很喜欢,于是自己撸了,虽然比较粗糙,不过胜在简单方便,代码也就三四百来行,有兴趣的可以试试 InfluxORM

Init

InfluxORM.setup(
  connection: { # 具体见 InfluxDB::Client.new
    database: 'test'
  }
)

Define MEASUREMENTS

class Memory
  include InfluxORM

  influx_tag :host
  influx_tag :region
  influx_value :free
  influx_value :used, :int # support :int, :float, :boolean, :string
end

Write

Memory.insert(host: 'A', region: 'US', free: 1234, used: 2234)

Memory.import([
  {host: 'A', region: 'US', free: 1234, used: 2234, timestamp: 1234567890},
  {host: 'A', region: 'US', free: 1244, used: 2224, timestamp: 1234567900},
  {host: 'B', region: 'US', free: 234, used: 3234}
])

Query

Memory.count # => 4
Memory.where(host: 'A').count # => 1
Memory.select('mean(*)') \
  .where(host: 'A', time: {gte: Time.now - 10.day, lte: Time.now - 1.day}) \
  .group_by('time(1m) fill(0)').result

Memory.where(host: 'B').or(host: 'C').limit(10).result
Memory.where("host = 'A' AND time > now() - 1d").where(free: {lt: 1024}).result

query_obj = Memory.where(host: 'A').or(host: 'B')
Memory.where(region: 'US').or(query_obj) # select * from memorys where region = 'US' OR (host = 'A' OR host = 'B')

More query methods

  • select: select('mean(*)'), select({mean: 'tag_name', sum: 'tag_name'})
  • where: where('tag = \'value\''), where(tag: 'value', time: {gt: Time.now - 1.day})
  • or: or('tag = \'value\''), or(tag: 'value', time: {gt: Time.now - 1.day})
  • group_by: group_by('host')
  • fill: fill(0)
  • limit: limit(1)
  • slimit: slimit(1)
  • offset: offset(1)
  • soffset: soffset(1)
共收到 8 条回复
8

个人看法 influx这种非关系数据库不需要orm… 因为操作的不是model对象 如果需要也是类似AREL之类的 Influx SQL Generator

370

InfluxDB 长久以来的问题是自身不稳定,包括底层存储数据结构和上层 API 接口也一直在变化中。

728

叫习惯了,哈哈哈哈

目前的主要功能就是提供方便的SQL生成,不用手写SQL,数据映射还真没做啥,直接返回了查询的hash

另一方面,写入数据时可以有一个简单的框来定义数据结构,有哪些tag, value

728
370kgen 回复

如果没有过行复杂的逻辑,应该也触及不到这些变化吧。。。

字段类型就那么几个,tag, value这两类也不会有啥变的了,然后就一些聚合统计函数了

我是刚折腾,没踩过啥坑的人,哈哈哈

370
728xjz19901211 回复

我们当时依赖 InfluxDB 做一些实时数据处理,逻辑比较复杂,它接口一直改,最终我们放弃了。

728
370kgen 回复

后来你们换成什么方案了?想了解下,哈哈

370
728xjz19901211 回复

基于安全原因,我们采用的方案都是不说的,只有抛弃的方案可以公开 😂

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册