首页
学习
活动
专区
圈层
工具
发布

问定长表
EN

Database Administration用户
提问于 2015-04-01 18:38:38
回答 2查看 1.4K关注 0票数 1

我只使用过mysql并将数据存储在.txt文件中。

目前,我正在处理滴答数据(我的服务器上有node.js )。到目前为止,我的自定义设置将固定数量的滴答数据作为逗号分隔的值存储在txt文件上(我使用javascript来添加新的值并删除旧的)。设置不能安全地收集到我想要的那么多的信息,偶尔也会发生服务器故障和数据丢失/损坏的情况。“重新增长”所有数据需要很长时间,所以我需要一些更健壮的东西(这种方式太脆弱了)。

如何实现适合这种描述的数据结构?

数据库应该存储与unix时间戳相关的最早到最新的价格。数据库应该有最多的行数(100,000)。如果添加一个新行会使数据库超出其最大大小,那么它应该删除其最老的行。

我的想法是:我可以把主键设置为时间戳吗?如何将数据库保持在一定数量的行?如果我在一个查询中一次得到所有行,那么速度会是多少?什么样的数据库语言适合这样做?

我只有3-4个用户将访问这个应用程序,所以不会有太多的查询。txt文件不适合存储大数据。

有什么建议吗?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2015-04-01 19:22:18

我可以把主键设置为时间戳吗?

是的,主键可以是任何列,但我认为最好使用ID列作为主键,以确保它是唯一的(这在技术上是不可能使用时间戳主键的)。正如ypercube所建议的那样,在使用(timestamp, id)和版本5.6+时,对时间值使用毫秒的PK可能也是一个很好的选择。

您仍然可以在datetime列上创建一个索引,这将提供类似的性能,不过,如果您一直在撤回所有行,那么从一开始就不是什么问题了。

如何将数据库保持在一定数量的行?

可以使用存储过程处理多个逻辑段,如

  • 插入新行
  • 查表行计数
    • 如果> 100,000删除最老行

或者,您可以使用具有类似逻辑的触发器,并为表上的每个插入自动触发。

如果我在一个查询中一次得到所有行,那么速度会是多少?

就关系数据库而言,100,000行并不多,因此您不应该有检索时间的问题。

什么样的数据库语言适合这样做?

再说一遍,它的尺寸很小,所以几乎所有的东西都能工作。如果您以前有过使用MySQL的经验,那么它似乎是一个显而易见的选择。

票数 2
EN

Database Administration用户

发布于 2015-04-02 09:17:35

遵循约翰氏的建议;

“尝试使用NoSQL (如MongoDB)来利用您对JavaScript的熟悉程度”

我一直在查看MongoDB教程http://www.tutorialspoint.com/mongodb/mongodb_创建_collection.htm,他们有一个有上限的集合(表),如果集合长度为1000个,则自动删除旧文档(行)。这是一个内置的功能。所以我现在要放弃MySql,去MongoDB

代码语言:javascript
复制
>db.createCollection("mycol", { capped : true, autoIndexID : true, size : 6142800, max : 10000 } )
{ "ok" : 1 }
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/96823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档