Ala*_*ody 10 ruby database ruby-on-rails nosql
我最近一直在研究NoSql选项.我的方案如下:
我们从世界各地的远程位置收集和存储来自定制硬件的数据.我们每15分钟记录一次每个站点的数据.我们最终希望每1分钟一次.每条记录有20到200个测量值.设置硬件记录并每次报告相同的测量值.
我们面临的最大问题是我们从每个项目中获得一组不同的测量结果.我们测量大约50-100种不同的测量类型,但是任何项目都可以具有任何数量的每种类型的测量.没有可以容纳数据的预设列集.因此,我们在系统上设置和配置项目时,使用所需的确切列创建和构建每个项目数据表.
我们提供工具来帮助分析数据.这通常包括更多计算和数据聚合,其中一些我们也存储.
我们目前正在使用一个mysql数据库,每个客户端都有一个表.表之间没有关系.
NoSql看起来很有希望,因为我们可以存储一个project_id,时间戳,然后其余部分不会被预设.这意味着一个表,数据中的更多关系,但仍然处理各种测量.
'NoSql'解决方案适合这项工作吗?如果是这样的?
我一直在调查MongoDB,看起来很有希望......
澄清示例:
项目1记录了5个数据点,mysql表列如下:时间戳,温度,风速,降水,辐照度,风向
项目2有3个数据点记录mysql表列:timestamp,temp,irradiance,temp2
简单的答案是,此类问题没有简单的答案,找出适合您场景的唯一方法就是投入研发时间。
这个问题很难回答,因为OP没有阐明性能要求。许多客户的记录数似乎为 75M/年,写入率为 num_customers*1 分钟(较低),但我没有所需的读取/查询性能的数据。
实际上,您已经拥有一个使用水平分区的分片数据库,因为您将每个客户存储在单独的表中。这很好,并且会提高性能。但是,您尚未确定存在性能问题,因此需要对其进行测量并评估问题的大小,然后才能修复它。
NoSQL 数据库确实是解决传统 RDBMS 性能问题的好方法,但它不会提供自动可扩展性,也不是通用的解决方案。您需要找到性能问题的解决方案,然后设计 (nosqL) 数据模型来提供解决方案。
根据您想要实现的目标,我会考虑MongoDB、Apache Cassandra、Apache HBase或Hibari。
请记住,NoSQL 是一个模糊的术语,通常包含
因此,首先我会看看传统的 RDBMS 是否可以使用所有可用的技术来实现所需的性能,获取一份High Performance MySQL 的副本并阅读MySQL Performance Blog。
根据您的评论,我认为可以公平地说,您可以使用上述 NOSQL 引擎之一实现您想要的目标。
我的主要建议是设计和实现您的数据模型,您目前使用的数据模型并不正确。
因此,请查看实体属性值模型,因为我认为它完全适合您的需求。
在考虑使用哪种技术之前,您需要先建立正确的数据模型,老实说,动态修改架构并不是数据模型。
我会使用传统的 SQL 数据库来验证和测试新的数据模型,因为管理工具更好,并且在细化数据模型时通常更容易使用模式。