我是一个没有comp sci背景的新手。所以请原谅我可能会说的任何蠢事。我正在研究太阳能监测项目,以监测我公司安装的太阳能发电系统的输出功率。我正在编写一个客户端,每隔15分钟对我们每个监控客户的逆变器(电源输出,电压输出,电流输出,系统错误/故障等 - 构成一个“读数”)进行查询有他们的系统 - 这意味着每个客户每年大约35,000读数。所以我想用以下两种方式之一组织我的sqlite3数据库。
(1)让数据库成为两个表,一个表包含常规客户信息(名称,电子邮件等),另一个表更大,每行代表一个读数,并包括客户ID和读取时间戳作为标识符。这意味着每个客户每年将在这个更大的表中添加大约35,000行。 (超过两年的数据将被削减并存档。)
OR
(2)将所有读数存储在csv文件中(每个客户一个csv文件),并使用常规客户信息将csv文件名存储在我的表中
该数据库将服务于一个网站(如果对选项产生任何影响,则构建在rails上),客户将能够查看其输出功率数据。我想最小化在登录时加载输出数据所需的时间。我基本上不清楚我的计算机打开和读取文本文件中的行与打开,查找(基于客户ID)和从大型sqlite3读取数据所需的时间量。表 - 因此我很难知道如何判断上述两个选项。此外,我无法衡量sqlite3的极限,尽管已经阅读了一些关于它的最佳功能(我不认为我有理解我所做的阅读的背景,因为它似乎说数百万行的数据就好了当我读到其他人的评论似乎恰恰相反时。)我也对一个完全不同的选择持开放态度,因为我现在没有和任何东西结婚。无论是什么让事情变得更快。非常感谢提前!
答案 0 :(得分:0)
SQL应用程序通常可以很好地处理大型数据集,只要对要查询的列进行索引即可。您应该将它们保存在同一个数据库中。从数据库获取数据比解析CSV文件要少得多。创建数据库的目的是存储和检索数据,CSV文件不是。
我使用每个表有数千万行的MySQL数据库,查询会在几分之一秒内返回结果。 SQLite可能会更快。
只需确保为要搜索的内容创建索引。
答案 1 :(得分:0)
如果您正在对其进行任何类型的重复数据挖掘,那么将解析后的数据存储在sqlite中肯定会节省时间。 CSV解析开销几乎会立即占用您获得的任何数据库空间/时间节省。
至于效率,你必须测试它。没有一个硬快速规则说“使用这个数据库”或“使用该数据库”。它始终是“取决于场景”。在这种情况下,SQLite对您来说可能是完美的,但对于工作量稍有不同的其他人来说则无用。
答案 2 :(得分:0)
我会选择选项1,但使用PostgreSQL等数据库服务器而不是SQLite。
SQLite会在更新时锁定表,因此如果您对表进行大量读写操作,可能会遇到锁定问题。 SQLite更适合桌面或智能手机上的单用户应用程序。
您可以轻松拥有数百万行而不会造成任何问题。