我正在研究一个涉及大量插入日的项目,我将有一个用户列表(例如一组500 K的用户),为此我需要监测与它们相关的日常某些活动。
例如,假设有一组100个用户,比如U1、U2、.、U100
我需要把他们每天的分数插入我的数据库。
考虑到用户U1在6月30日至7月6日期间获得的总分如下
June 30 - 99
July 1 - 100
July 2 - 102
July 3 - 102
July 4 - 105
July 5 - 105
July 6 - 107
数据库应该保存每个用户的每日分数,如
July 1- 1pt (100-99)
July 2- 2pt (102-100)
July 3- 0pt (102-102)
July 4- 3pt (105-102)
July 5- 0pt (105-105)
July 6- 2pt (107-105)
类似地,数据库应该保存完整用户集的日常详细信息。
在后面的阶段,我设想从这些数据中提取汇总报告,比如在每一天、每周、每一个月的总分等,并将其与较早的数据进行比较。
我需要从头开始,我有PHP作为服务器端脚本和MYSQL的经验。我在数据库方面很困惑吗?既然我每天需要处理大约一百万次插入,那么所有的事情都应该处理好吗?
MySQL是否符合我的要求,如果符合,应该使用哪个存储引擎?最初,我设想创建一个带有外键用户id的用户表,并以日期作为fields.And创建一个月计分表,后来我得到了建议,首先将内容写入csv/excel,然后在特定时间段后将其加载到表中。
在这方面,文件插入会使事情变得更有利吗?
或者我应该尝试一些其他的数据库,NoSQL方法?
我需要维护这个数据仓库,并将这些信息聚合到每周和每月的reports.In中--这是以前我发现MySQL查询执行过程中花费了很多时间的情况。
任何帮助都将不胜感激。提前谢谢。
发布于 2014-07-09 16:00:50
为了解决你的第一个问题:
我对PHP作为服务器端脚本和MYSQL很有经验。我在数据库方面很困惑吗?
在用PHP进行开发时,MySQL是用来管理数据的工具。您的应用程序使用它创建、读取、更新或删除(CRUD)记录/实体/信息行。如果您从您的/compute应用程序中获得一个实例/虚拟机(Vm)引擎,那么该工具通常称为数据库引擎。因此,如果我正确理解了您的声明,您使用的数据库是MySQL。
关于你的第二个问题:
MySQL是否符合我的要求,如果符合,应该使用哪个存储引擎?
至于哪个数据库,您需要事务安全功能、高容量和(给定您的每日记录)高可用性。MySQL、Oracle和Microsoft是三个广泛使用的数据库。它们既可以作为前提实现,也可以作为云实现。MySQL确实有适合这种情况的存储引擎风格,比如它们的集群数据库引擎。在每天插入1条记录的500 K用户中,您将看到平均插入量为20k /小时。虽然这不是一个非常高的插入率,但我假设您的峰值插入率将大大提高。MS和Oracle非常适合这种环境,但通常需要数据库管理级别的知识来了解它们的功能,以便有效地利用它们。话虽如此,Oracle和MS的计算能力始终给我留下了深刻的印象,尽管您并不需要这么做,只是需要一个可以非常快地汇总列的数据库。
请注意,此要求可能会排除某些设置插入最大值的云数据存储解决方案。(这是可以克服的,但您需要对存储体系结构和定制特性有很好的了解。)
我对nosql环境知之甚少,所以我不能给您任何想法。
作为一项建议,由于您对MySql有一定的了解,我建议深入探讨性能问题。这可能是因为您使用了错误的存储引擎来满足您的需求。另外,您的测试可能是在一个共享实例上进行的,这意味着您可能已经与其他用户的许多操作一起访问了服务器。如果您使用的是ISP的MySql版本的底层服务,您可能会遇到其他服务管理问题。您已经在学习MySql,所以您可能很快发现并解决任何问题,而不是学习一个新的数据库操作环境。
https://softwarerecs.stackexchange.com/questions/7474
复制相似问题