Hello
Parallel archiver version 1.06 , stable version is here,
i have stress tested it and you can be now more confident with it...
Author: Amine Moulay Ramdane
Description: Parallel archiver using my ParallelZlib..
Supported features:
- Opens and creates archives using my ParrallelZlib
- Compiles into exe - no dll/ocx required.
- 64 bit supports - lets you create archive files over 4 GB
- Now my ParallelZlb gives 5% better performance than Pigz.
- Parallel compression and parallel decompression are extremely fast
- It supports both compression and decompression rate indicator
- You can test your archive
- Easy object programming interface
- Full source codes available.
- Platform: Win32 ,Win64 (will be ported soon to Linux and Mac OS
Will support parallel encryption and LZMA and LZ and Bzip and memory streams in the near future
Please look at test.pas inside the zip file, compile and execute it.. -
When you want to delete files inside the archive you have to call the DeleteFiles() method , the DeleteFiles() method will not delete the files, it will mark the files as deleted , but it will not delete the files , when you want to delete completly the files , you have to call the DeletedItems() method to see how many files are marked deleted and after that you use the Clean() method to delete completly the file from the archive. I have implemented it like that, cause it's better in my opinion..
Other than that, you have to call the LoadIndex() just after you create your TPZArchiver object with the constructor, it's mandatory, and by calling the LoadIndex() method , my Parallel archiver will be fault tolerant to power failures etc.
You can give the following CompressionLevel: zcNone or zcLevel1 to zcLevel9.
And my parallel archiver uses a hashtable to store the file names and there corresponding file positions so that you can direct access to files inside the archive when decompressing, and deleting etc. so it's very fast.
Also, i have included the FindFile component, it's very easy to use, here is how to use it:
ff:=TFindFile.create(nil); // the constructor
ff.recurse:=true; // recurse on directories
ff.directory:='c:\zip'; // your directory
ff.Attributes:=[ffArchive];
ff.filter:='*.*'; // your files..
ff.execute; // and execute
After that you pass the ff.files (that is a TStrings) to the AddFiles() method.
That's very easy.
Pealse look at the test.pas demo inside the zip file to see how to use my Parallel archiver.
And please don't use directly the ParalleZlib.pas that i have included inside the Parallel archiver zip file, cause i have modified it to work correclty with my Parallel archiver.
If you want to use my ParallelZlib library just download it from my website, or download my other Parallel compression library.
In the near future i will add parallel AES encryption, and also i will add LZMA , LZ and BZip compressions and decompressions, and i will add support for memory streams, and i will port it to Linux and Mac OSX(x86).
You also will be able to use my Parallel archiver as a hashtable from the hardisk with 0(1) access, you can for example
stream your database row with my ParallelVarFiler into a memory stream or into a string, and store it with my Parallel archiver into an archive, and after that your can access your rows into the hardisk as a hashtable with O(1) access, you can use it like this as a database if you you have id keys that you want to map to database rows, that will be a good idea to
use my Parallel archiver as a hashtable. I will add the Distributed Reader-Writer Mutex 1.13 that
i have implemented to my Parallel archiver soon, so that you can parallelize the read access.
Question:
What's your newest ideas behind your parallel archiver ?
Answer:
Of course my Parallel Archiver does support Parallel commpression etc. but my newest ideas behind my Parallel Archiver are this:
I have played with Winzip and 7Zip , but if you want to give some files to extract or to test there integrity, they both (Winzip and 7Zip) will use sequential access and that's bad i think, so i have decided to implement a O(1) access that is very fast for extraction and and for testing the integrity etc. into my Parallel Archiver and for that i have used an in-memory hashtable that maintains the files names and there correponding file positions , and my second idea is that my Parallel Archiver is fault tolerant to for exemple power failures and also if your hardisk is full and you get file corruption etc. so my Parallel Archiver is fault tolerant to this kind of problems , 7Zip and Winzip i think are not fault tolerant to those kind of problems, and of course you will also soon use my Parallel archiver as a hashtable from the hardisk.
have just played with 7Zip , and i have compressed 3 files into the archive and after than i have opened the archive with an editor and i have deleted some bytes and i have saved the file and after that when i have tried to open the archive, 7zip responded that the file is corrupted, so 7Zip is not fault tolerant, i think that with WinZip it's the same, but i have done the same test with my Parallel archiver, and it's recovering from the file damage, so it's fault tolerant to this kind of damages, such as power failures and when also the disk is full and you get a file corruption etc. I have implemented this kind of fault tolerancy
into my Parallel archiver.
Hope you will enjoy my Parallel archiver, and i will soon extend it more.
Here is the public methods that i have implemented:
Constructor Create(file1:string,size:integer;nbrprocs:integer);
- Creates a new PZArchiver ready to use, size is the hashtable size for the index(Key file names and the corresponding file position ,and file1 is the file archive, nbrprocs is the number of cores you have specify to run ParallelZlib in parallel.
function AddFiles;
- Add the TStringList content to the archive.
function DeleteFiles;
- Delete the TStringList content from the archive.
function ExtractFiles;
- Extract the TStringList content from the archive.
function ExtractAll;
- Extract all the files from the archive.
function Test;
- Test the integrity of the files inside the archive.
function GetInfo;
- Get the file info that is returned in a TPZArchiver record.
function ClearFile;
- Deletes all contents of the archive.
unction DeletedItems:integer
- Return the number of items marked deleted.
function LoadIndex:boolean
- Load the the the key indexed and there correpondant values from the file passed to the constructor.
function Exists(Name : String) : Boolean;
- Returns True if a file Name exists
procedure GetKeys(Strings : Tstrings);
- Fills up a TStrings descendant with all the file names.
function Count : Integer;
- Returns the number of files inside the archive.
PUBLIC PROPERTIES:
Items[Name : String] : Variant
- Get the file name (indexed).
You can download Parallel archiver version 1.06 from:
http://pages.videotron.com/aminer/Language: FPC Pascal v2.2.0+ / Delphi 7+:
http://www.freepascal.org/Operating Systems: Win32 and Win64 (will be ported soon to Linux and Mac (x86)).
And inside defines.inc you can use the following defines:
{$DEFINE CPU32} and {$DEFINE Win32} for 32 bits systems
{$DEFINE CPU64} and {$DEFINE Win64} for 64 bits systems
Required FPC switches: -O3 -Sd -dFPC -dWin32 -dFreePascal
-Sd for delphi mode....
Required Delphi switches: -DMSWINDOWS -$H+ -DDelphi
Thank you,
Amine Moulay Ramdane.