Java 存储';用户收到通知的次数';关于数据库

Java 存储';用户收到通知的次数';关于数据库,java,mysql,Java,Mysql,我正在使用JavaSpring和MySQL开发这个函数“发送通知给所有用户*次” 这是我提出的数据库结构 表:通知 ╔════╦════════════════════╦════════════════════╦══════════════════════╦══╗ ║ ID ║ TITLE ║ CONTENT ║ RECEIVE_CRITERIA ║ ║ ╠════╬════════════════════╬═══════════════

我正在使用JavaSpring和MySQL开发这个函数“发送通知给所有用户*次”

这是我提出的数据库结构

表:通知

╔════╦════════════════════╦════════════════════╦══════════════════════╦══╗
║ ID ║       TITLE        ║      CONTENT       ║   RECEIVE_CRITERIA   ║  ║
╠════╬════════════════════╬════════════════════╬══════════════════════╬══╣
║  1 ║ Welcome to our app ║ NULL               ║ Just for demonstrate ║  ║
║  2 ║ Hi                 ║ Welcome to our app ║ Just for demonstrate ║  ║
╚════╩════════════════════╩════════════════════╩══════════════════════╩══╝
表:通知设置

╔═════════╦═══════════════╗
║ NOTI_ID ║ MAX_SEND_TIME ║
╠═════════╬═══════════════╣
║       1 ║             3 ║
║       2 ║             5 ║
╚═════════╩═══════════════╝
表:通知统计

╔════╦═════════╦═════════╦════════════════╦══╗
║ ID ║ USER_ID ║ NOTI_ID ║ NUM_OF_RECEIVE ║  ║
╠════╬═════════╬═════════╬════════════════╬══╣
║  1 ║      23 ║       1 ║           2    ║  ║
║  2 ║      32 ║       1 ║           1    ║  ║
║  3 ║      23 ║       2 ║           3    ║  ║
║  4 ║      32 ║       2 ║           5    ║  ║
╚════╩═════════╩═════════╩════════════════╩══╝
我面临一个问题:

  • 当创建了新的通知程序(表示此通知准备第一次发送)时,我会查询可接收该通知的用户的合格列表,然后循环遍历每个用户并将新记录插入到通知统计中。我收到的列表最多可以是20000条记录 我觉得遍历这么多记录并执行插入对我们的服务器来说可能是个问题,但我不知道如何改进它。所以我想问,是否有更好的解决方案可以解决我的问题

    (请忽略此项,与1相同的问题)
    2.每次重新发送通知时,我都会查询通知统计中不存在的新用户列表,并执行与步骤1相同的循环。我在这里收到的列表最多可以是1000条记录

    谢谢你的阅读


    编辑:编辑1)和2)使问题更容易理解

    问题的第一步是:您的所有用户都在一个数组“users”中。 步骤2:在此步骤中,您将在NOTIFICATION_STATISTIC table中执行插入,并确认是否存在该用户和通知组合的统计信息,以最小化查询负载

    在第2步之前,从NOTIFICATION_STATISTIC表中获取所有通知统计信息(如数组“statistics”),其中NOTI_ID是必须插入20000条记录的当前通知ID

    现在,实际的步骤2在NOTIFICATION_STATISTIC中插入行,只需检查循环中当前用户id的“statistics”数组,如果它在那里,则不插入,如果用户id不在数组“statistics”中,则只插入

    示例代码(只是逻辑,不是为Java编写的):


    对不起,格式不对!我现在要回家了,回家后我会编辑我的帖子。很抱歉让你误解了我的问题。1) 2)不是两个步骤。这是我面临的两个问题。我将编辑我的问题,以便更容易理解
    variable notitfication_id = 3; 
    array users; // all list of users
    statistics = "SELECT USER_ID FROM NOTIFICATION_STATISTIC WHERE NOTI_ID = notitfication_id"; // SQL query;
    foreach (users as user) {
        if (!statistics contain user.id OR user.id IS NOT IN the array statistics) {
            INSERT INTO NOTIFICATION_STATISTIC VALUES ('', user.id, notitfication_id, 0);
        }
    }