我有一个功能,允许用户导入联系人(电子邮件地址和姓名)。一些用户导入大约70,000个联系人的文件,可以是xls或csv格式。这是我现在所拥有的:
我遇到的问题是作业似乎需要太长时间,而且我遇到了超时。这导致导入花费了太多时间。
因此,我的问题是:我能做得更好吗?
如果需要其他信息,请告诉我。我没有处理大数据和许多用户的经验。
编辑:我不需要代码。我想知道的是,问题是否是服务器问题?也许将数据库移动到自己的服务器上会起作用?还是应该采用不同的方法?
编辑2:用户可以查看导入的进度。因此,我需要计算联系人的数量,为此,我需要首先过滤掉没有电子邮件地址的行。我还要修剪它以及名称列。当我这样做时,我发现将新数据集保存到JSON文件中更容易。
编辑3:超时是在将用户保存到数据库中时发生的,而不是在初始处理和创建json文件时发生的。
编辑4:加速作业的一种方法可能是从一开始就将其保存到块中(在第一个处理中)。这样,我就不需要处理跳过计数器,也不必对大型数据集使用array_slice。现在回想起来,将其保存到JSON文件中然后缓存似乎有点愚蠢。为什么不从一开始就缓存数组呢?
- 用户选择要从中导入联系人的文件(来自他们的计算机)。
- 我将文件保存在服务器上,并创建一个带有文件位置引用的数据库条目。
- 使用Amazon SQS在后台处理此数据。
- 第一次运行作业时,我会处理文件,仅保存具有电子邮件地址和姓名(如果找到)的行。该数据将保存到同一位置的json文件中并进行缓存。然后我将任务释放回队列。
- 现在联系人已准备好导入。我每次处理1000个联系人,并将每个联系人保存在数据库中的单独行中。我使用array_slice跳过JSON文件中的联系人。跳过计数保存到数据库中。
- 没有联系人时,删除任务并完成全部操作。
我遇到的问题是作业似乎需要太长时间,而且我遇到了超时。这导致导入花费了太多时间。
因此,我的问题是:我能做得更好吗?
如果需要其他信息,请告诉我。我没有处理大数据和许多用户的经验。
编辑:我不需要代码。我想知道的是,问题是否是服务器问题?也许将数据库移动到自己的服务器上会起作用?还是应该采用不同的方法?
编辑2:用户可以查看导入的进度。因此,我需要计算联系人的数量,为此,我需要首先过滤掉没有电子邮件地址的行。我还要修剪它以及名称列。当我这样做时,我发现将新数据集保存到JSON文件中更容易。
编辑3:超时是在将用户保存到数据库中时发生的,而不是在初始处理和创建json文件时发生的。
编辑4:加速作业的一种方法可能是从一开始就将其保存到块中(在第一个处理中)。这样,我就不需要处理跳过计数器,也不必对大型数据集使用array_slice。现在回想起来,将其保存到JSON文件中然后缓存似乎有点愚蠢。为什么不从一开始就缓存数组呢?