اخطاءت بوضع الموضوع هنا مع ان فيه أمثلة ولكن كنت اريده بموضوع المقالات
الموقع
باختصار اذا كنت تتحدث عن السرعة dBase او DbfDotNet هي ما نتحدث عنه .
هي قاعدة بيانات تتعامل مع القرص وتستطيع التعامل مع قواعد بيانات عديدة بنفس الوقت وهي لا تتعامل مع الذاكرة .
اذا لدينا كلمتين هنا ، سرعة ، ومساحة صغيرة .
في DbfDotNet يتم إجراء جميع أعمال تحويل البيانات تلقائيًا.
إطار كيان بسيط للغاية
حجم ملف Dll اخر مرة كان حجمه 50 كيلو
باجراء مقارنة صغيرة لنرى قاعدة بياناتنا هذه
اذا ماذا عن Ado.net
فرق رهيب أليس كذلك
أنها اسرع بحوالي 400 مرة من ثقنية Ado.net ولو كانت على SqlServer نفسه وبشحمه ولحمه
أنشاء الجداول في قاعدة بياناتنا هذه
في Ado.net
ادخال البيانات في فيها
أما في Ado.net
فرق كبير في الكود وفي حجمه لاحظ NewRecord وايضا SaveChange في الاعلى
الاستعلام برقم الـ ID في قاعدة بياناتنا
في Ado.net
حفظ التغييرات
في Ado.net
لترتيب البيانات
في Ado.net
سوف ارفق ملف Demo وملف مشروع مفتوح لاتنسي تضمين الملف DbfDotNet.dll مع المشروع ليعمل
لمزيد من المعلومات يمكن مراجعة المصدر هنا
الموقع
PHP كود :
https://archive.codeplex.com/?p=dbfdotnet
باختصار اذا كنت تتحدث عن السرعة dBase او DbfDotNet هي ما نتحدث عنه .
هي قاعدة بيانات تتعامل مع القرص وتستطيع التعامل مع قواعد بيانات عديدة بنفس الوقت وهي لا تتعامل مع الذاكرة .
اذا لدينا كلمتين هنا ، سرعة ، ومساحة صغيرة .
في DbfDotNet يتم إجراء جميع أعمال تحويل البيانات تلقائيًا.
إطار كيان بسيط للغاية
حجم ملف Dll اخر مرة كان حجمه 50 كيلو
باجراء مقارنة صغيرة لنرى قاعدة بياناتنا هذه
PHP كود :
Dbf.Net
Opening DbfDotNetDatabase: 185 ms
Insert 1000 individuals: 39 ms
Read individuals sequentially: 5 ms
Read individual randomly: 3 ms
Modifying individuals: 21 ms
Create DateOfBirth index: 77 ms
Michael Simmons 22/07/1909
Mark Adams 21/09/1909
Charles Edwards 28/09/1909
... total 1000 records
Enumerate Individuals by age: 36 ms
Closing DbfDotNetDatabase: 44 ms
اذا ماذا عن Ado.net
PHP كود :
Opening ADO.Net Database: 459 ms
Insert 1000 individuals: 80601 ms
Read individuals sequentially: 1655 ms
Read individual randomly: 1666 ms
Modifying individuals: 75574 ms
Create DateOfBirth index: 80 ms
Michael Simmons 22/07/1909
Mark Adams 21/09/1909
Charles Edwards 28/09/1909
... total 1000 records
Enumerate Individuals by age: 29 ms
Closing ADO.Net Database: 0 ms
فرق رهيب أليس كذلك
أنها اسرع بحوالي 400 مرة من ثقنية Ado.net ولو كانت على SqlServer نفسه وبشحمه ولحمه
أنشاء الجداول في قاعدة بياناتنا هذه
PHP كود :
DbfTable<dbfdotnetindividual> mIndividuals;
void CreateIndividualTable()
{
mIndividuals =
new DbfTable<dbfdotnetindividual>(
@"individuals.dbf",
Encoding.ASCII,
DbfDotNet.DbfVersion.dBaseIV);
}
class Individual
: DbfDotNet.DbfRecord, IIndividual
{
[DbfDotNet.Column(Width = 20)]
public string FIRSTNAME;
[DbfDotNet.Column(Width = 20)]
public string MIDDLENAME;
[DbfDotNet.Column(Width = 20)]
public string LASTNAME;
public DateTime DOB;
[DbfDotNet.Column(Width = 20)]
public string STATE;
}
في Ado.net
PHP كود :
Connection _cnn = null;
void ITestDatabase.CreateIndividualTable()
{
_cnn = new System.Data.Connection(
"Data Source=adoNetTest.db");
_cnn.Open();
using (DbCommand cmd = _cnn.CreateCommand())
{
cmd.CommandText = "CREATE TABLE
INDIVIDUAL (ID int primary key,
FIRSTNAME VARCHAR(20),
MIDDLENAME VARCHAR(20),
LASTNAME VARCHAR(20),
DOB DATE,
STATE VARCHAR(20))";
cmd.ExecuteNonQuery();
}
}
ادخال البيانات في فيها
PHP كود :
void InsertNewIndividual(
int id,
string firstname,
string middlename,
string lastname,
DateTime dob,
string state)
{
var indiv = mIndividuals.NewRecord();
indiv.FIRSTNAME = firstname;
indiv.MIDDLENAME = middlename;
indiv.LASTNAME = lastname;
indiv.DOB = dob;
indiv.STATE = state;
indiv.SaveChanges();
}
أما في Ado.net
PHP كود :
void InsertNewIndividual(
int id,
string firstname,
string middlename,
string lastname,
DateTime dob,
string state)
{
using (DbCommand cmd =
_cnn.CreateCommand())
{
cmd.CommandText = string.Format(
"INSERT INTO INDIVIDUAL (ID,
FIRSTNAME, MIDDLENAME, LASTNAME,
DOB, STATE) VALUES({0},
'{1}', '{2}', '{3}',
'{4}', '{5}');",
id, firstname, middlename,
lastname,
dob.ToString("yyyy-MM-dd HH:mm:ss"),
state);
cmd.ExecuteNonQuery();
}
}
فرق كبير في الكود وفي حجمه لاحظ NewRecord وايضا SaveChange في الاعلى
الاستعلام برقم الـ ID في قاعدة بياناتنا
PHP كود :
IIndividual GetIndividualById(int id)
{
DbfDotNetIndividual result =
mIndividuals.GetRecord(id);
return result;
}
في Ado.net
PHP كود :
IIndividual GetIndividualById(int id)
{
using (DbCommand cmd =
_cnn.CreateCommand())
{
cmd.CommandText = string.Format(
"SELECT * FROM INDIVIDUAL
WHERE ID=" + id);
var reader = cmd.ExecuteReader();
try
{
if (reader.Read())
return GetNewIndividual(reader);
else return null;
}
finally
{
reader.Close();
}
}
}
Individual GetNewIndividual(
DbDataReader reader)
{
var res = new Individual();
res.ID = reader.GetInt32(0);
res.FirstName = reader.GetString(1);
res.MiddleName = reader.GetString(2);
res.LastName = reader.GetString(3);
res.Dob = reader.GetDateTime(4);
res.State = reader.GetString(5);
return res;
}
class Individual : IIndividual
{
public int ID { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public DateTime Dob { get; set; }
public string State { get; set; }
}
حفظ التغييرات
PHP كود :
void SaveIndividual(
Individual individual)
{
individual.SaveChanges();
}
في Ado.net
PHP كود :
void SaveIndividual(
IIndividual individual)
{
using (DbCommand cmd =
_cnn.CreateCommand())
{
cmd.CommandText = string.Format(
"UPDATE INDIVIDUAL
SET DOB='{1}' WHERE ID={0};",
individual.ID,
individual.Dob.ToString(
"yyyy-MM-dd HH:mm:ss"));
cmd.ExecuteNonQuery();
}
}
لترتيب البيانات
PHP كود :
IEnumerable<Individual>
IndividualsByAge()
{
foreach (Individual indiv
in mDobIndex)
{
yield return indiv;
}
}
في Ado.net
PHP كود :
IEnumerable<Individual>
IndividualsByAge()
{
using (DbCommand cmd =
_cnn.CreateCommand())
{
cmd.CommandText = string.Format(
"SELECT * FROM INDIVIDUAL
ORDER BY DOB");
var reader = cmd.ExecuteReader();
try
{
while (reader.Read())
{
yield return
GetNewIndividual(reader);
}
}
finally
{
reader.Close();
}
}
}
سوف ارفق ملف Demo وملف مشروع مفتوح لاتنسي تضمين الملف DbfDotNet.dll مع المشروع ليعمل
لمزيد من المعلومات يمكن مراجعة المصدر هنا
PHP كود :
https://www.codeproject.com/Articles/36895/Building-an-embedded-database-engine-in-C