المتداول بنفسك الرسالة الغير مشفرة المعرفة (المعرفة داخل DB)

StackOverflow https://stackoverflow.com/questions/613038

سؤال

وأي شخص يعرف من API (فب الأفضل ولكن سأكون مهتما في أي لغة) لإنشاء تخزين البيانات مثل ويكي؟

وماذا عن أية موارد على المتداول يكي الغير مشفرة الخاصة بك؟ كيف الويكي عادي أخرى مقبض على شكل ملف نصي؟

وأنا أفهم يمكنني استخدام تخفيض السعر أو منسوجات للتنسيق. ولكن ما أنا مهتم في غير كيفية التعامل مع تخزين الغير مشفرة التحرير متعدد المستخدمين.

وأنا أكتب تطبيق ويب الذي هو في المقام الأول قاعدة بيانات مدفوعة. أريد حقل نصي واحد على الأقل من قاعدة البيانات هذه ليكون في شكل مثل ويكي. على وجه التحديد، هذا النص يمكن تحريره من قبل عدة مستخدمين لديهم القدرة على استرجاع إلى أي إصدار. أعتقد أن القسم يكي / الحيوي من (تقريبا الموقع Last.FM كله هو منظم بدقة بواسطة قاعدة بيانات باستثناء هذا القسم واحد لكل فنان).

وحتى الآن، وجهة نظري من تفكيك ميدياويكي والتوتيد إلى قاعدة بيانات تبدو مبالغة. أنا أفكر أنه سيكون من الأسهل بكثير للفة بلدي عادي ويكي، وتخزين هذا الملف في حقل النص المناسب قاعدة البيانات.

هل كانت مفيدة؟

المحلول

لذلك، أساسا هذا هو "كيف يمكنني معلومات الإصدار النص في بلدي DB".

حسنا، وأبسط طريقة هي مجرد نسخ البيانات.

وببساطة، إنشاء "نسخة" الجدول الذي يحمل "النسخ القديمة" للبيانات، وربطه إلى الجدول الرئيسي.

create table docs {
    id integer primary key not null,
    version integer not null,
    create_date date,
    change_date date,
    create_user_id integer not null references users(id),
    change_user_id integer references users(id),
    text_data text
}

create table versions {
    id integer primary key not null,
    doc_id integer not null references docs(id),
    version integer,
    change_date date,
    change_user integer not null references users(id),
    text_data text
}

وكلما قمت بتحديث المستند الأصلي، يمكنك نسخ القيمة النصية القديمة في لهذا الجدول، نسخ التاريخ المستخدم والتغيير وعثرة النسخة.

select version, change_date, change_user, text_data 
    into l_version, l_change_data, l_change_user, l_text_data 
from docs where id = l_doc_id;

insert into versions values (newid, l_doc_id, l_version, 
    l_change_date, l_change_user, l_text_data);

update docs set version = version + 1, change_date = now, 
    change_user = cur_user, text_data = l_new_text where id = l_doc_id;

ويمكنك حتى أن تفعل ذلك في مشغل إذا DB يدعم هؤلاء.

وأخطاء مع هذه الطريقة هي التي لها نسخة كاملة من البيانات (حتى إذا كان لديك وثيقة كبيرة، والنسخة البقاء كبير). يمكنك تخفيف ذلك باستخدام ما يشبه فرق (1) والتصحيح (1).

وعلى سبيل المثال:

diff version2.txt version1.txt > difffile

وبعد ذلك يمكنك تخزين تلك difffile باسم "النسخة 1".

في أجل استرداد النسخة 1 من الإصدار 2، والاستيلاء على الإصدار 2 البيانات، تشغيل التصحيح على ذلك باستخدام بيانات الملف فرق، والتي تمنحك V1.

إذا كنت تريد أن تذهب من V3 لV1، تحتاج إلى القيام بذلك مرتين (مرة واحدة للحصول على V2، ثم مرة أخرى للحصول على V1).

وهذا يقلل عبء التخزين الخاصة بك، ولكن يزيد معالجة الخاص بك (واضح)، لذلك سيكون لديك للحكم على مدى تريد أن تفعل هذا.

نصائح أخرى

والجواب ويل ضخمة هي على حق، ولكن يمكن تلخيصها، وأعتقد أن: تحتاج إلى تخزين النسخ، ومن ثم تحتاج إلى تخزين البيانات الوصفية (الذي ما عندما البيانات)

.

ولكن كان سؤالك حول الموارد على المعرفة مثل الإصدارات. أنا لا شيء (حسنا، واحد: الجواب ويل ما سبق ). ومع ذلك، حول تخزين الويكي، وأنا واحد. تحقق من مصفوفة مقارنة من دوكو ويكي . أنا أعلم. كنت أفكر "ماذا يهمني ما نوع من DB مختلفة استخدام الويكي؟" لأن يستخدم دوكو ويكي ملفات النص العادي. يمكنك فتح عليهم وهم في الواقع سهل. ولهذا نهج واحد، وأنها قد حصلت على بعض الحجج مثيرة للاهتمام لماذا DBMS ليست هي أفضل طريقة للذهاب. حتى أنها لا تحمل الكثير من الفوقية: معظم الاشياء تتم من خلال ملفات مسطحة أنفسهم.

وهذه النقطة من دوكو ويكي بالنسبة لك هو أنه ربما انها مشكلة بسيطة نسبيا (اعتمادا على مدى تريد حلها:)

وفيما يلي قائمة من جميع الويكي 12 على WikiMatrix التي تتم كتابتها في PHP والقيام التخزين الخاصة بهم باستخدام ملفات نصية. ربما يكون واحدا منهم سيكون له طريقة التخزين التي يمكن أن تتكيف في قاعدة البيانات:

<لأ href = "HTTP: //www.wikimatrix. غزاله / search.php؟ سيد = 1760 "يختلط =" نوفولو noreferrer "> http://www.wikimatrix.org/search.php؟sid=1760

وهذا يبدو وكأنه كنت في الأساس فقط تبحث عن التحكم في الإصدار. إذا كان هذا هو الحال، قد ترغب في النظر في خوارزمية فرق.

وهنا هو ويكيبيديا الفرق الصفحة.

ولقد فعلت ذلك لفب البحث السريع فرق جوجل، ولكن لا شيء وقفت حقا مثالا لائق، لأن ليس لدي سوى معرفة PHP الأساسية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top