【问题标题】:Why my API takes 2-3 seconds to proccess one request?为什么我的 API 需要 2-3 秒来处理一个请求?
【发布时间】:2020-08-13 15:27:53
【问题描述】:

我的 API 有问题。我用 lumen 构建 API 并为我的数据库使用了 sql server。所以这个API有一个插入数据的功能。但是在插入数据之前,我的应用程序会检查数据是否插入了任何具有相同参数的数据。

问题是每次发送到我的 API 的请求都需要 2-3 秒来处理。当我使用我的日志进行跟踪时,它显示检查重复数据时需要 1 秒,保存数据时需要 1 秒。

有什么更好的性能建议吗?我想用 php 来考虑 noSQL。是不是比sql server更强大?

有关信息,我与多个应用程序一起使用的数据库连接到它。谢谢

这是我的代码

$getSameSppa = Sppa::where('nosppa', $SppaData->SPPA)
                ->whereNotNull('policyno')
                ->get();
        if($getSameSppa->count() > 0){
            $PolicyNo = $getSameSppa[0]->policyno;
                
            $return['data'] = array(
                'ID' => property_exists($SppaData, 'ID') ? $SppaData->ID:'',
                'SppaNo' => $SppaData->SPPA,
                'PolicyNo' => $PolicyNo
            );
            
            $return['response_code'] = env('BRI_RESPONSE_CODE_DUPLICATE','02');
            $return['message'] = 'SPPA sudah pernah disubmit';
            
            Facades\Log::info('SPPA sudah pernah disubmit', $return);
        }
        else{
            Facades\Log::info('SPPA belum pernah disubmit');
            
            // delete SPPA dengan nomor polis kosong
            Sppa::where('nosppa', $SppaData->SPPA)
                    ->whereNull('policyno')
                    ->delete();
            
            
            $nomorPolis = $this->_generate_policy_number($SppaData->MAKER_BRANCH_CODE, $SppaData->KODE_PRODUK, $SppaData->SPPA);
            Facades\Log::info('Generate nomor polis berhasil');
            
            try {
                $insertSppa = new Sppa();
                $insertSppa->nosppa = $SppaData->SPPA;
                $insertSppa->urutansppa = $SppaData->URUTAN_SPPA;
                $insertSppa->norekpinjaman = $SppaData->NOREK_PINJAMAN;
                $insertSppa->noreksimpanan = '';
                $insertSppa->kodeuker = sprintf('%05d', $SppaData->MAKER_BRANCH_CODE);
                $insertSppa->kodeproduk = $SppaData->KODE_PRODUK;
                $insertSppa->jenisproduk = $SppaData->JENIS_PRODUK;
                $insertSppa->tanggalentri = $SppaData->SPV_DATE;
                $insertSppa->periodeawal = $SppaData->PERIODE_MULAI_PERTANGGUNGAN;
                $insertSppa->periodeakhir = $SppaData->PERIODE_AKHIR_PERTANGGUNGAN;
                $insertSppa->tanggalrealisasipinjaman = $SppaData->TANGGAL_REALISASI_PINJAMAN;
                $insertSppa->jangkawaktupinjamanbulan = $SppaData->JANGKA_WAKTU_PINJAMAN_BULAN;
                $insertSppa->jangkawaktupinjamantahun = $SppaData->JANGKA_WAKTU_PINJAMAN_TAHUN;
                $insertSppa->loantypepinjaman = $SppaData->KODE_LOANTYPE;
                $insertSppa->namatertanggung = $SppaData->NAMA_SIMPANAN;
                $insertSppa->alamattertanggung = $SppaData->ALAMAT_SIMPANAN;
                $insertSppa->tanggallahir = $SppaData->TANGGAL_LAHIR_SIMPANAN;
                $insertSppa->lokasiresiko = $SppaData->ALAMAT_RESIKO;
                $insertSppa->alamattempatusaha = $SppaData->ALAMAT_TEMPAT_USAHA;
                $insertSppa->notelp = $SppaData->NOMOR_HANDPHONE_SIMPANAN;
                $insertSppa->email = $SppaData->EMAIL_SIMPANAN;
                $insertSppa->noktp = $SppaData->NO_IDENTITAS_SIMPANAN;
                $insertSppa->cif = $SppaData->CIF_SIMPANAN;
                $insertSppa->cifpinjaman = $SppaData->CIF_PINJAMAN;
                $insertSppa->kodepos = $SppaData->KODEPOS_SIMPANAN;
                $insertSppa->kodeposresiko = $SppaData->KODEPOS_RESIKO;
                $insertSppa->kodepostempatusaha = $SppaData->KODEPOS_TEMPAT_USAHA;
                $insertSppa->policyno = $nomorPolis;
                $insertSppa->namaahliwaris = substr($SppaData->NAMA_AHLI_WARIS, 0, 49);
                $insertSppa->alamatahliwaris = $SppaData->ALAMAT_AHLI_WARIS;
                $insertSppa->notelpahliwaris = $SppaData->NOMOR_TELPON_AHLI_WARIS;
                $insertSppa->hubungan = $SppaData->HUBUNGAN_AHLI_WARIS;
                $insertSppa->tgl_terima_sppa = date('Y-m-d H:i:s');
                
                $saveSppa = $insertSppa->save();
                
                Facades\Log::info('Simpan SPPA berhasil');
            } catch (\PDOException $ex) {
                $return['data'] = array(
                    'ID' => property_exists($SppaData, 'ID') ? $SppaData->ID:'',
                    'SppaNo' => $SppaData->SPPA,
                    'PolicyNo' => ''
                );
                
                $return['message'] = 'Gagal simpan data SPPA';
                $return['exception'] = $ex->getMessage();
                
                $saveSppa = FALSE;
                
                Facades\Log::error('Simpan SPPA gagal', $return);
            }

【问题讨论】:

  • 您必须与我们共享代码,以便我们知道如何优化您的代码。
  • 所以我添加了我的代码。感谢指正
  • 我查看了代码,没有发现任何问题。检查由 ORM 运行的查询,看看它们是否确实需要大约 1 秒才能通过 Management Studio 或您用来与数据库交互的任何应用程序手动运行。如果它们确实很慢,您可以使用EXPLAIN 找出原因。如果查询很快,那么问题就出在其他地方。可能是开发人员和数据库之间的网络、VM 共享文件夹或其他东西。

标签: php sql-server nosql


【解决方案1】:

我找到了解决方案,当我在用于检查重复数据的字段中添加索引时,处理速度更快。现在一击需要一秒钟或更短时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 2018-08-05
    • 1970-01-01
    • 2019-01-18
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多