2017-11-08 23 views
0

캐시 시스템이 필요한 프로그램을 작성하고있었습니다. 그래서 설명은 4 개의 열, 'mac', 'src', 'username', 'main'이있는 mysql db를가집니다. 어떤 mac, src, username이 주 테이블의 키/값 및 외래 키입니까? 그것들은 3 번에 먼저 삽입하고 ID를 메인에 넣을 것입니다. 내가 얻은 데이터는 주 테이블의 경우 약 18m이며,이 테이블의 경우 약 2m입니다. main에 삽입해야 할 때마다 select를 사용하고 싶지 않으므로 배열을 캐시에 사용했습니다. $ hash = [ 'mac'=> [], 'src'=> [], 'username'=> []]; 그리고 다음과 같이 'n 데이터 가져 오기'를 저장하십시오 : $ hash [ 'mac'] [ '54 : 52 : 00 : 27 : e4 : 91'];PHP 캐시 메커니즘

이 접근법은 해시 데이터가 500k를 초과하면 성능이 저하됩니다. 이렇게하려면 더 좋은 방법이 있습니까?

추신 : nodeJS에서 hashtable이라는 npm 모듈을 사용하고 성능이 약 10k 인 경우 각 4m를 삽입 한 것과 같은 결과를 얻었습니다. 나는 php 배열에 대해 읽었으며 Hashtable이라는 것을 알았지 만 지금은 훨씬 더 낮은 방식으로 동일한 작업을 수행한다. 단 1k만으로는 적어도 5 분이 걸린다.

+1

는 용서하지만 당신이 필요로하는 이유를 나에게 분명하지 않다 거기에 무엇이든의 캐시를 사용합니다. 삽입 작업 만하는 경우 왜 매회 막대한 양의 데이터를 선택해야합니까? 어쩌면 테이블 구조에 대해 더 자세히 설명하면 더 잘 이해할 수 있습니다. – jaswrks

+0

@ jaswrks 예를 들어 설명해 드리겠습니다. 'mac'표에 , 2 백만 개의 데이터, ID 및 값이 있습니다. ID = 100100, 값 = '54 : 52 : 00 : 27 : e4 : 91 '; 내 메인 테이블에서 행을 삽입해야하므로 '54 ID : 54 : 52 : 00 : 27 : e4 : 91 'whichis 100100'의 'mac ID'가 필요합니다. 아주 나쁜 수행 할 삽입 선택 쿼리를 수행 할 수 또는 일종의 캐시 시스템에서 수행하십시오. 그리고 그게 좋지 않다고 생각하면 저를 고치세요. –

답변

0

Linux 서버를 사용한다고 가정합니다. 참조 : Creating a RAM disk. 일단 RAM 디스크를 가지고 있다면, 각각의 ID을 파일로 저장하고, MAC 주소의 sha1() 해시를 사용하십시오. RAM 디스크 파일은 RAM입니다. 즉, 메모리 내의 영구 캐시.

<?php 
$mac = '54:52:00:27:e4:91'; 
$cache = '/path/to/ramdisk/'.sha1($mac); 

if (is_file($cache)) { // Cached already? 
    $ID = file_get_contents($cache); // From the cache. 
} else { 
    // Run SQL query here and get the $ID. 

    // Now cache the $ID. 
    file_put_contents($cache, $ID); // Cache it. 
} 
// Now do your insert here. 

는 명확히하기 : RAM 디스크는 PHP에서 파일 시스템 래퍼를 사용할 수 있습니다, 같은 file_get_contents()file_put_contents()으로 RAM에 읽기/쓰기 할 수 있습니다.


다른 더 강력한 대안을 고려해야 할