我正在使用node.js(非express)服务器和mysql数据库进行项目。当用户单击页面上的按钮时,它会上载2个值(例如,SpecificName,Yes / No)。现在,这些值通过节点服务器插入到mysql数据库中。稍后,mysql运行对specificName列的检查(如果找不到,则会创建一个具有相同Name的列)并更新其中的第二个值。
现在我想保留用户通过网站(即是)在mysql数据库中进行5分钟的第二个值的每次更新,之后它会自动用另一个值(比如取消)更新特定位置。除了这5分钟的悖论,我很乐意解决所有事情。另外我保留了15-20个所谓的specificName列,其中值(说是/否)正在更新,同时有超过1000行同时工作,所以很多5分钟的定时器正在进行中价值。有没有办法暂时在mysql中存储值,之后它会自动销毁?。
我遇到了:
- node-crons(过于复杂,甚至不知道它是否是正确的选择)
- mysql事件(我不知道如何将它与节点一起使用)
- 时间戳(不能创建多个时间戳(我想每列需要一个时间戳))
- datetime(还没有测试过)和其他类似的东西
(DELETE FROM
table
WHERE timestamp
> DATE_SUB(NOW(),INTERVAL 5 MINUTE))。
现在我不知道该使用什么或如何解决这个难题。
醇>
任何帮助将不胜感激。
2 个答案:
答案 0 :(得分:0)
根据我与Sammy在kik上的谈话,我很确定你不想这样做。这听起来不像是一个适合MySQL的用例。我也担心你的MySQL知识是超级有限的,在这种情况下,你应该花时间对MySQL做更多的研究。如果没有更好地理解您的应用程序试图实现的更大目标,我无法建议更好的替代方案。如果您能想出一种解释应用程序行为而不影响产品创意的方法,那么这将有助于我们解决您的问题。
在给出潜在答案之前,我想弄清楚的一般事项:
- 您不应该更改应用程序中的列。这是我在Node / Mongo世界中遇到的问题之一。关系数据库不喜欢频繁更改表定义。这是一个痛苦的一天的快速方式。在像Mongo或Cassandra这样的非关系系统中这样做很好,但是传统的关系数据库并不喜欢这样。应用程序应该只插入,更新和删除行。你们已经被警告了。
- 我不确定您是否要将数据放入有效期短的MySQL中。您可能需要某种缓存解决方案,例如memcache或redis。现在,您可以使MySQL的行为类似于缓存,但这不是它的预期用途。有更好的解决方案。如果您坚持使用MySQL,我建议调查MEMORY storage engine,以便在系统突然关闭时以丢失数据为代价加快读/写速度。
以下是一些可能的解决方案:
- MySQL Events - 有一个时间戳列和一个计划运行的事件...说每分钟左右。如果事件发现某行的持续时间超过5分钟,请将其删除。
- NodeJS setTimeout - 从应用程序中插入记录后,设置超时5分钟,然后删除所述记录。您可能希望确保您拥有某种id或timestamp列,以便对值进行快速参考。
这些是我想到的两个最佳解决方案。同样,如果您能够轻松了解应用程序的行为方式,需要这样的不寻常解决方案,我们可以帮助您找到更好的解决方案。
答案 1 :(得分:0)
好的,所以我想我自己弄清楚了。我正在为所有仍处理此查询的人发布此答案。我在mysql中使用了DATETIME标记,我为每个specificName.so的每一列创建了每个specificName列,还有另一个specificName_TIME列,用于存储值的时间(是/否)更新。我没有使用时间戳的原因是因为它不可能在低于5.6的mysql版本中创建时间戳的结束号。现在我通过在将其存储在数据库中之前添加5分钟来更新当前时间。然后我运行了2个链函数。第一个检查数据库中的日期时间是否小于当前时间(SELECT specificName FROM TABLE WHERE specificName_TIME< NOW())。如果结果为true,则显示值,否则它反映为null。然后我运行了第二个函数更新值,如果它的true再次继续整个过程,如果不是继续它,无论如何用null更新最后一个值。
希望这有帮助。