2011-05-14 3 views
1

Microsoft Azures Blob 저장소에 Zend Framework를 저장하려고합니다. Azure Blob 스토리지는 Zend Framework가 깊이 중첩 된 구조를 갖는 플랫 파일 시스템을 가지고 있습니다.원래 구조를 나타 내기 위해 모든 파일의 이름을 바꾸면서 디렉토리 구조를 개선하십시오.

다음 명명 규칙/방법을 사용하여 모든 Zend Framework 파일을 포함하는 폴더를 만들고 싶습니다.

예 :

라이브러리 파일 이름을 지정해야합니다 새로운 평면 출력 폴더에서/젠드/로그인/Writer.php

:

Zend.Log Zend_Log_Writter 클래스에 저장됩니다. Writter.php

나는 Linux 또는 Windows 작업을 수행 할 도구를 사용합니다. 이 작업을 수행하는 PHP 스크립트를 작성할 수는 있지만 링크 된 명령을 사용하여 수행 할 수있는 Linux Foo가 있습니다.

+0

정말 필요한가요? 이게 도움이되지 않을까요? http://social.msdn.microsoft.com/Forums/en/windowsazuredata/thread/0a184e05-1d20-4b37-9ce5-bee8a5b6d09c 나는 Azure에 대해 아무것도 모른다. 그러나 폴더를 가짜로 만드는 방법을 설명하는 것 같다. –

+0

안녕 Pekka, 응답 해 주셔서 감사합니다. 링크의 메서드는 폴더 구조가 내 질문에 설명 된 것과 유사한 이름 지정 시스템을 통해 표시된다는 것을 나타냅니다. 필자는 라이브러리를 설명 된 조건으로 가져와 Azure 저장소에 업로드하고 명명 규칙을 사용하여 원하는 '구조체와 같은 폴더'를 얻어야한다고 확신합니다. –

+0

afaik에서는 구분 기호로 슬래시 (/)와 점 (.)을 사용할 수 있습니다. –

답변

1

이 질문을 올바르게 읽는다면 파일 시스템을 Windows Azure 저장소의 개별 BLOB에 매핑하는 것처럼 들립니다. 요청 된 파일을 개별 blob에 매핑하려면 중간 계층을 사용해야합니다. (그리고 blob에 액세스 할 때 사용할 수있는 매우 강력한 SDK이 있습니다.) 얼룩에 대한 한 가지 수정 : 정확히 평평하지 않습니다. URI는 https://mystorageaccount/containername/blobname입니다. 하나의 네이티브 디렉토리 (컨테이너)가 있으며 Pekka가 제공 한 기술로 더 많은 레벨을 시뮬레이션 할 수 있습니다.

그러나 나에게이 매핑은 성능에 영향을 줄뿐만 아니라 트랜잭션 관련성이있을 수있는 것처럼 들립니다.

대신 Windows Azure 페이지 BLOB에 NTFS 형식 클라우드 드라이브를 탑재하지 않으시겠습니까? 드라이브는 최대 1TB까지 가능하며 드라이브 문자를 통해 액세스 할 수 있습니다. 내구성이 뛰어나며 (데이터 센터 내에서 3 중 복제 됨) Zend의 파일 디렉토리 구조와 같이 거의 아무 것도 설치할 수 없습니다. 설정이 아주 쉽습니다. 아마도 12 줄의 코드 일 것입니다.

클라우드 드라이브에 대한주의 사항 : 단 한 명의 작가. 웹 응용 프로그램을 여러 인스턴스로 확장 할 때이를 염두에 두어야합니다. 해결 방법 (예 : 인스턴스 당 하나의 클라우드 드라이브가있는 경우)과 캐싱 (최근에 생산에 들어간 새로운 AppFabric Cache 등)을 이용하는 경우.

편집 : 다음은 Maarten Balliauw의 great Cloud Drive sample으로, 클라우드 드라이브를 생성/할당/마운트하는 데 필요한 단계를 보여줍니다.

+0

이것은 유망한 것 같습니다! 팁 고마워. blob 저장소를 사용하면 성능에 영향을 미칩니다. 다음 단계는 초기로드 후에 blob에서로드되는 코드를 중지하기 위해 op-code 현금을 사용하는 것입니다. NTFS 파일 공유는 생각처럼 들립니다. 구현 예에 대한 링크가 있습니까? –

+0

@Ben - 방금 Cloud Drive 샘플에 대한 링크를 추가했습니다. 희망이 도움이됩니다. –

1

나는 이것을 파이썬에서 어떻게하는지 안다. 다음은 그 예입니다. 먼저 더미 디렉토리에서 테스트하여 올바르게 사용하고 있는지 확인하십시오.

import os 
import shutil 
directory = '/path/to/your/directory/' 
for root, folder, files in os.walk(directory): 
    for file in files: 
     print(directory+'renamed/'+root.replace('/', '.')[1:]+'.'+file) 
     shutil.copy(root+'/'+file, directory+'renamed/'+root.replace('/', '.')[1:]+'.'+file) 

내가 파이썬을 사용하는 이유에 편집 : 나는 find 명령과 처음 리눅스에서 간부 옵션을 사용하여 시도했다 ....하지만 훨씬 깨끗하고 쉽게이 방법을 이해합니다. 나는 당신이 bash 껍질에서 하나의 위버의 멋진 줄로 갈 수 있다고 생각합니다. 그러나 이것이 실제로는 관련 코드의 단지 4 줄이기 때문에 그럴 가치가 있다는 것을 알아 내고 시도하는 데 필요한 여분의 시간을 확신 할 수 없습니다.

0

이 코드를 사용해보십시오. Microsoft의 StorageClient 라이브러리를 사용합니다.

네임 스페이스 RenameBlobs { 클래스 프로그램 {

static void Main(string[] args) 
    { 
     CloudStorageAccount csa = CloudStorageAccount.DevelopmentStorageAccount; 
     string blobContainerName = "png1"; 
     string oldDelimiter = "/"; 
     string newDelimiter = "."; 
     CloudBlobClient blobClient = csa.CreateCloudBlobClient(); 
     var blobContainer = blobClient.GetContainerReference(blobContainerName); 
     string blobContainerUriString = blobContainer.Uri.AbsoluteUri; 
     BlobRequestOptions blobRequestOptions = new BlobRequestOptions() 
     { 
      UseFlatBlobListing = true, 
     }; 
     var blobsList = blobContainer.ListBlobs(blobRequestOptions); 
     foreach (var blob in blobsList) 
     { 
      var blockBlob = (CloudBlockBlob) blob; 
      var abc = blockBlob.Metadata; 
      blockBlob.FetchAttributes(); 
      string blobName = blockBlob.Uri.AbsoluteUri; 
      blobName = blobName.Replace(blobContainerUriString, string.Empty); 
      if (blobName.StartsWith(oldDelimiter)) 
      { 
       blobName = blobName.Substring(1); 
      } 
      if (blobName.Contains(oldDelimiter)) 
      { 
       blobName = blobName.Replace(oldDelimiter, newDelimiter); 
       string newBlobUriString = string.Format("{0}/{1}", blobContainerUriString, blobName); 
       var cloudBlob = blobContainer.GetBlobReference(newBlobUriString); 
       cloudBlob.CopyFromBlob(blockBlob); 
      } 
     } 
    } 
} 

}

는이 코드에 대한 문의 사항이 있으면 알려주세요.

희망이 도움이됩니다.

감사합니다.

관련 문제