草庐IT

mysql - 我应该为每个用户(有数百万用户)存储 90 行数据吗?

coder 2023-10-10 原文

我正在规划 MySql 数据库的结构,可以使用经验丰富的专业人士的一些建议。 DB 所属站点为每个注册用户收集 90 天的天气数据,并且必须支持数百万用户。

我已经为用户准备了一张表,其中包含他们的登录名和联系信息,但假设我需要第二张表来存储所有天气数据...

我打算做的基本上是存储每个用户每天的平均温度、湿度、风向等等。每天数据库都会用新一天的数据更新,同时为所有用户保留昨天的条目(但限于 89 天的旧数据 + 当天的数据)。

现在,拥有一个包含每个用户(数百万用户)的 90 行的巨大“数据”表是否最有意义?或者出于性能原因或类似原因,是否有更聪明的方法可以更好地做到这一点?

每次用户登录并查看自己的个人资料或浏览其他人的个人资料时,都会访问(读取和显示等)90 天的数据。但它每天只会更新一次(覆盖最旧的条目,保持每个用户 90 行的限制。)

最佳答案

编辑:刚才看到每个用户都有不同的天气数据。在答案中保留“共享数据”,但您对第二种情况感兴趣。

用户分享天气数据

例如,基于他们最近的气象站 ID。

我将存储一个 (userId, stationId, isActive, isPreferred) 表以了解用户对哪些数据感兴趣,然后我将对 stationWeatherData 运行查询以获取该站的 90 行天气数据。

每个用户都有自己的天气数据

处理 9 亿用户应该没有什么特别的问题。如果你真的必须这样做,你可以根据 userId 在不同的表上“分片”,例如,表 weather174 将保存所有用户的数据,(userId % 1000) 给出 174,你会发现自己有 1000 个表 - 可能在不同的服务器 - 大小的千分之一。

因此,您从一张大表开始,准备分片(或迁移到云存储和非 SQL keystore 数据库,例如 MongoDB、VoltDB)。或者,一旦 UserID 达到一百万,就根据 UserID 进行分区。

甚至,您根本不使用数据库。如果您需要搜索或关联/连接数据,数据库就很有意义——在这里您只是访问用户的“气象站”。

如果您知道您永远不会查询“有多少用户有 60% 的湿度?”,而总是只查询“用户 1234567 有哪些数据?”,那么您可以将数据以二进制形式保存在滚动缓冲区中、JSON 或 HTML 格式(在云存储、S3 或 MongoDB 上——现在每个用户只有一个文档)。这在很大程度上取决于要更新的​​数据是如何到达的,即来自集中器的一大批数据或每个用户上传自己的数据。

关于mysql - 我应该为每个用户(有数百万用户)存储 90 行数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11389797/

有关mysql - 我应该为每个用户(有数百万用户)存储 90 行数据吗?的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  3. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  4. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  5. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  6. ruby - RVM "ERROR: Unable to checkout branch ."单用户 - 2

    我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas

  7. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  8. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  9. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  10. ruby - Rack:如何将 URL 存储为变量? - 2

    我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

随机推荐