Почему моему API требуется 2-3 секунды для обработки одного запроса?

#php #sql-server #nosql

#php #sql-сервер #nosql

Вопрос:

У меня проблема с моим API. Я собираю API с lumen и использовал sql server для своей базы данных. Итак, в этом API есть функция для вставки данных. Но перед вставкой данных мои приложения проверяют данные, если вставлены какие-либо данные с таким же параметром.

Проблема в том, что каждый раз, когда запрос отправляется в мой API, обработка занимает 2-3 секунды. Когда я отслеживаю свой журнал, он показывает, что при проверке дублирующихся данных это занимает 1 секунду, а при сохранении данных — 1 секунду.

Есть ли какие-либо предложения по повышению производительности? я думаю о NoSQL с php. Является ли он более мощным, чем 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';
            
            FacadesLog::info('SPPA sudah pernah disubmit', $return);
        }
        else{
            FacadesLog::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);
            FacadesLog::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('d', $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();
                
                FacadesLog::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;
                
                FacadesLog::error('Simpan SPPA gagal', $return);
            }  

Комментарии:

1. Вам придется поделиться с нами кодом, чтобы мы знали, как вы можете оптимизировать свой код.

2. поэтому я добавляю свой код. спасибо за исправление

3. Я просмотрел код и не вижу в нем ничего плохого. Проверьте запросы, которые запускаются ORM, и посмотрите, действительно ли им требуется ~ 1 секунда для запуска вручную через Management Studio или любое другое приложение, которое вы используете для взаимодействия с базой данных. Если они действительно медленные, вы можете использовать EXPLAIN , чтобы выяснить, почему. Если запросы выполняются быстро, значит, проблема в другом. Это может быть сеть между разработчиком и базой данных, общая папка виртуальной машины или что-то совсем другое.

Ответ №1:

Я нашел решение, когда я добавляю индекс в поле, которое использовалось для проверки дублирующихся данных, процесс выполняется быстрее. Теперь одно нажатие занимает секунду или меньше.