🏛️ HONGIKINGAN CMS хөгжүүлэгчийн гарын авлага

Хувилбар 202506 | Шинэчилсэн 2025-06-12
🌐 Хэл сонгох: 🇰🇷 한국어 🇲🇳 Монгол 🇺🇸 English

8. ⚡ Гүйцэтгэл оновчлол

8.1 Кэш систем

HONGIKINGAN CMS нь гүйцэтгэлийг сайжруулахын тулд EhCache суурьтай кэш систем үзүүлдэг. Түгээмэл ашиглагддаг өгөгдлийг санах ойд кэшлэж өгөгдлийн сан хандалтыг багасгаж хариу өгөх хугацааг сайжруулдаг.

8.1.1 Кэш тохиргоо

HONGIKINGAN CMS нь дараах кэшийг үзүүлдэг:

🗄️Үзүүлэх кэшийн төрөл

  • humanCommonCache: Сайт цэс зэрэг нийтлэг өгөгдөл кэшлэх
  • humanCodeCache: Код өгөгдөл кэшлэх

🌐Тархсан кэш сүлжээний порт шалгалт

HONGIKINGAN CMS-ийн EhCache нь олон серверийн орчинд кэш синхрончлолын тулд дараах сүлжээний портуудыг ашигладаг:

  • Мультикаст хаяг: 230.0.0.1
  • Пээр мультикаст порт: 4446
  • Мессеж хүлээн авах порт: 40001

Чухал: Олон серверийн орчинд кэш синхрончлолын алдаа гарвал эдгээр портууд өөр програмаар ашиглагдаж байгаа эсэхийг шалгах шаардлагатай. Портын зөрчил гарвал кэш кластержих зөв ажиллахгүй байж болно.

Портын ашиглалт шалгах аргууд
# Linux/Unix орчинд портын ашиглалт шалгах
netstat -an | grep 4446
netstat -an | grep 40001

# Windows орчинд портын ашиглалт шалгах
netstat -an | findstr 4446
netstat -an | findstr 40001
ehcache-human.xml тохиргоо
<?xml version="1.0" encoding="UTF-8"?>
<ehcache updateCheck="false">
    <diskStore path="user.dir/second"/>
    <defaultCache maxEntriesLocalHeap="100"
                  eternal="false"
                  overflowToDisk="false"
                  />

    <cache name="humanCommonCache"
           maxEntriesLocalHeap="5000"
           eternal="false"
           overflowToDisk="false"
           timeToLiveSeconds="300"
           memoryStoreEvictionPolicy="LRU">
           <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />
    </cache>

    <cache name="humanCodeCache"
           maxEntriesLocalHeap="1000"
           eternal="false"
           overflowToDisk="false"
           timeToLiveSeconds="7200"
           memoryStoreEvictionPolicy="LRU">
    </cache>
</ehcache>

8.1.2 Кэш сервис

HONGIKINGAN CMS нь кэшийг удирдахын тулд HumanEhcacheService үзүүлдэг.

Үндсэн функц

Хэрэгжүүлэлт класс
@Service("humanEhcacheService")
public class HumanEhcacheServiceImpl extends HumanAbstractServiceImpl implements HumanEhcacheService {

    @Resource(name="comm.ehcache.humanCommonCache")
    Ehcache humanCommonCache;

    @Resource(name="comm.ehcache.humanCodeCache")
    Ehcache humanCodeCache;

    @Override
    public void removeCache(String targetCache, String cacheCode) throws Exception {
        if(EgovStringUtil.equals("code", targetCache)){
            if (humanCodeCache.isKeyInCache(cacheCode)) {
                humanCodeCache.remove(cacheCode);
            }
        } else if(EgovStringUtil.equals("common", targetCache)){
            if (humanCommonCache.isKeyInCache(cacheCode)) {
                humanCommonCache.remove(cacheCode);
            }
        }
    }

    @Override
    public void removeAllCaches(String targetCache) throws Exception {
        List cacheKeyList = null;

        if(EgovStringUtil.equals("code", targetCache)){
            cacheKeyList = humanCodeCache.getKeys();
            for (int i=0; i<cacheKeyList.size(); i++) {
                String cacheKey = (String) cacheKeyList.get(i);
                if (humanCodeCache.isKeyInCache(cacheKey)) {
                    humanCodeCache.remove(cacheKey);
                }
            }
        } else if(EgovStringUtil.equals("common", targetCache)){
            cacheKeyList = humanCommonCache.getKeys();
            for (int i=0; i<cacheKeyList.size(); i++) {
                String cacheKey = (String) cacheKeyList.get(i);
                if (humanCommonCache.isKeyInCache(cacheKey)) {
                    humanCommonCache.remove(cacheKey);
                }
            }
        }
    }
}

8.1.3 Кэш ашиглалтын жишээ

HONGIKINGAN CMS-ийн төрөл бүрийн сервисээс кэш ашиглан гүйцэтгэлийг оновчилдог.

Код сервис
@Service("codeService")
public class CodeServiceImpl extends EgovAbstractServiceImpl implements CodeService {

    @Resource(name = "comm.ehcache.humanCodeCache")
    Ehcache humanCodeCache;

    @Resource(name = "humanEhcacheService")
    HumanEhcacheService ehcacheService;

    public List<CodeVO> retrieveCodeList(Map paramMap) throws Exception {
        String cacheNm = "codeCache_" + /* кэш түлхүүр үүсгэх логик */;
        
        Element el = humanCodeCache.get(cacheNm);

        if (el == null) {
            List<CodeVO> codeList = codeDAO.retrieveCodeList(paramMap);
            humanCodeCache.put(new Element(cacheNm, codeList));
            el = humanCodeCache.get(cacheNm);
        }

        return (List<CodeVO>) el.getValue();
    }

    public void updateCode(CodeVO codeVO) throws Exception {
        codeDAO.updateCode(codeVO);
        // Код өөрчлөх үед кэш устгах
        ehcacheService.removeAllCaches("code");
    }
}
Сайт сервис
@Service("siteService")
public class SiteServiceImpl extends EgovAbstractServiceImpl implements SiteService {

    @Resource(name="comm.ehcache.humanCommonCache")
    Ehcache humanCommonCache;

    @Resource(name = "humanEhcacheService")
    HumanEhcacheService ehcacheService;

    public List selectSiteMenuListAll() throws Exception {
        Element el = humanCommonCache.get("siteListCache");

        if (el == null) {
            List<SiteVO> siteMenuList = siteDAO.selectSiteMenuListAll();
            humanCommonCache.put(new Element("siteListCache", siteMenuList));
            el = humanCommonCache.get("siteListCache");
        }
        return (List<SiteVO>) el.getValue();
    }

    public void updateSite(SiteVO siteVO, String pblcateYN) throws Exception {
        // Сайтын мэдээлэл өөрчлөх үед кэш устгах
        ehcacheService.removeAllCaches("common");
        
        // Сайтын мэдээлэл шинэчлэх
        siteDAO.updateSite(siteVO);
    }
}

8.2 Өгөгдлийн сангийн асуулга оновчлол

HONGIKINGAN CMS нь MyBatis ашиглан өгөгдлийн сангийн асуулгыг удирддаг. Үр дүнтэй асуулга бичих замаар өгөгдлийн сангийн гүйцэтгэлийг оновчилж болно.

8.2.1 Индекс ашиглалт

Тохиромжтой индекс үүсгэж асуулгын гүйцэтгэлийг сайжруулж болно.

💡

Индекс ашиглалтын зөвлөмж

  • Түгээмэл хайгддаг баганад индекс үүсгэх
  • WHERE хэсэгт ашиглагддаг баганыг эрэмбэлэн авч үзэх
  • Нийлмэл индекс ашиглан гүйцэтгэл сайжруулах
  • Шаардлагагүй индекс нь гүйцэтгэл муудах шалтгаан болж болно

8.2.2 Хуудаслалт боловсруулалт

Их хэмжээний өгөгдлийг үр дүнтэй боловсруулахын тулд хуудаслалт боловсруулалт хэрэгжүүлнэ.

📄

Хуудаслалт боловсруулалтын давуу тал

  • Санах ойн ашиглалт оновчлол
  • Хариу өгөх хугацаа богиносгох
  • Хэрэглэгчийн туршлага сайжруулах
  • Серверийн ачаалал тараах

8.3 Дүгнэлт

HONGIKINGAN CMS нь EhCache суурьтай кэш системээр дамжуулан гүйцэтгэлийг оновчилдог. Түгээмэл ашиглагддаг өгөгдлийг санах ойд кэшлэж өгөгдлийн сан хандалтыг багасгаж хариу өгөх хугацааг сайжруулдаг. Мөн үр дүнтэй өгөгдлийн сангийн асуулга бичих замаар системийн ерөнхий гүйцэтгэлийг сайжруулж болно.

🎯

Гүйцэтгэл оновчлолын гол цэг

  • Кэш ашиглалт: EhCache-ээр дамжуулан санах ойн кэшлэлтээр өгөгдлийн сангийн ачаалал бууруулах
  • Асуулга оновчлол: Үр дүнтэй SQL бичих болон индекс ашиглалт
  • Хуудаслалт боловсруулалт: Их хэмжээний өгөгдлийн үр дүнтэй боловсруулалт
  • Тасралтгүй хяналт: Гүйцэтгэлийн үзүүлэлт хянах замаар тасралтгүй сайжруулалт