2009-11-20 3 views
2

작은 응용 프로그램을 만들고 호스팅 비용과 종속성을 줄이기 위해 모든 영구 데이터를 SQL Server가 아닌 XML 파일에 저장할 계획입니다. 데이터 베이스.ASP.NET 사이트에서 xml 파일 기반 저장소를 데이터베이스 대안으로 올바르게 사용

이 경우 사이트 방문자는 친구 및 가족으로 제한됩니다. 동시 사용자가 몇 명만 예상되므로 사이트는으로 확장 할 필요가 없습니다. 말 그대로 모든 트랜잭션에서 디스크의 xml 파일을 열고 닫을 수 있습니까? 대부분의 페이지는 몇 xml 파일의 데이터를 표시 할 수 있으며 사용자는 때때로 하나의 업데이트가 필요한 작업을 수행합니다.

예를 들어, 대략 얻고 저장하는 저장소 패턴 다음과 같은 "것들"몇 가지 방법은 같은 싶습니다 :이 방법

public IEnumerable<Thing> GetThings() { 
     XElement xml = XElement.Load(_xmlRepositoryPath); 
     var q = from s in xml.Descendants("Thing") 
       select new Thing { 
        //set properties... 
       }; 

     return q; 
    } 

    public void SaveThing(Thing t) { 
     XElement xml = XElement.Load(_xmlRepositoryPath); 
     //update xml... 
     xml.Save(_xmlRepositoryPath); 
    } 

어떤 함정이나 문제가? 차라리 추가 캐싱 또는 메모리 내 데이터 계층을 추가하는 복잡성을 피할 수 있습니다. 추가 크레딧 : 사용자로드 또는 거래 레벨의 어느 시점에서 이것이 다르게 구현되어야 할 필요가 있다고 생각합니까?

+1

SQL을 사용하지 않는 이유는 무엇입니까? 비용/라이센스상의 이유로 MS SQL Server를 사용하지 않는다면 SQLite는 아주 좋은 경량 대안입니다. 일을 단순하게 유지하기 위해 SQL을 사용하지 않는다면, XML이 좋은 대안이 될 수 있습니다. – FrustratedWithFormsDesigner

+0

호스팅 비용 때문에 SQL을 피할 수는 있지만 SQLite처럼 보이는 것은 옵션입니다. 감사합니다. –

답변

4

데이터베이스가 제공 할 수있는 중요한 것은 파일 시스템이 제공하지 않는 [원자 단위]입니다 (http://en.wikipedia.org/wiki/Atomicity_(database_systems%29). xml 파일에 둘 이상의 사용자가 액세스하는 즉시 ReaderWriter 잠금을 구현해야합니다 파일을 업데이트하려고 시도하는 동안 아무도 읽지 않도록하십시오. 문제는 아니지만 대부분의 데이터베이스 시스템에서 해결되는 문제입니다. 비용에 관심이 있다면 많은 오픈 소스 솔루션이 있습니다.

당신이 결정한 해결책은 모든 데이터 액세스를 캡슐화하여 변경이 너무 힘들지 않도록해야한다는 것입니다.

0

로드를 호출하는 측면에서 - 모든 히트에서이를 수행 할 수 있고 서버가 깜박 거리지도 않습니다. 실제로 XML을로드하고 URL을 기반으로하는 매개 변수를 사용하여 HTML로 렌더링하고 브라우저, XSLT의로드가 명시 적이거나 변환을 사용하여 렌더링 할 XML에 의해 암시 된 XML)과 관련한 문제는 보이지 않습니다. 동시 사용자를 100 명으로 구성해야 독서시 문제가 될 수 있습니다 자료.

파일 쓰기 (저장)와 관련하여 - 모르는 일이지만 동시성 (문제는 아님)을 다루는 것이 큰 문제가 될 것이라고 기대하지는 않습니다. 귀하의 사용 수준에서 응용 프로그램 잠금 창의 독창적 인 사용은 충분히있을 수 있습니다, 심각한 일이 어디로 XML로 데이터베이스의 사용 도전이 될 것입니다. 서버 측 코드의 성능 - - 일반적인 경우에 - AS를

옆으로이 ASP.NET 명확 바위 영역입니다 우수한 (아마 너무 좋은)입니다.

관련 문제