Jdbi: دعم R2DBC

تم إنشاؤها على ٧ فبراير ٢٠١٩  ·  16تعليقات  ·  مصدر: jdbi/jdbi

تنفيذ الدعم لـ R2DBC. قد يكون هذا شيئًا مثل jdbi-r2dbc . لمعلوماتك:

https://r2dbc.io/
https://github.com/r2dbc

أيضًا ، نحن ندعم Jdbi في vlingo-symbio والذي يعد جزءًا من نظامنا الأساسي التفاعلي. تحقق من ذلك. نود أن نجعل فريقك يعمل على زيادة السرعة على منصتنا الكاملة.

https://github.com/vlingo/vlingo-symbio-jdbc/tree/master/src/main/java/io/vlingo/symbio/store/object/jdbc/jdbi

help wanted integration

التعليق الأكثر فائدة

من الرائع رؤية هذه التذكرة.

أردت أن أسقط شيئين بسرعة لتوضيح حالة R2DBC:

  • إنها لا تزال مبادرة شابة ويجب تنفيذ أشياء مثل BLOB / CLOB ودعم الإجراءات المخزنة قبل أن نذهب إلى GA.
  • تعد برامج التشغيل تفاعلية تمامًا ولا يتم حظرها مما يعني أن جزء الإدخال / الإخراج بالكامل غير محجوب. لا يوجد تفريغ للحظر في تجمعات الخيوط.

على أي حال ، تهدف R2DBC إلى التقاط SPI بواسطة تطبيقات العميل مثل Spring Data R2DBC و R2DBC Client (غلاف صغير أعلى R2DBC SPI الذي يقرض بعض الأفكار من jdbi) والمزيد في المستقبل.

ال 16 كومينتر

مرحبا فون ، شكرا على المؤشر. رد الفعل جديد ومثير للغاية ولكن ما أفهمه هو أن التنفيذ الحالي لـ JDBC ، وفي الواقع برنامج خادم قاعدة البيانات نفسه ، يجعله مرشحًا ضعيفًا للمفاهيم التفاعلية في الطبقات الدنيا. يحتوي خادم قاعدة البيانات على عمليات عاملة تأخذ الاستعلامات وتنتج النتائج ، وستعمل كل عملية على الاستعلام الخاص بها حتى اكتماله. لا توجد إمكانية لتقديم 10 استفسارات بشكل غير متزامن وانتظار نتائجها.

هذا يعني أنه أثناء قيامك بتطبيق رد الفعل JDBC ، ستجد في النهاية أنه يجب عليك تنفيذ مجموعة مؤشرات ترابط ذات نمط قديم تحتوي على اتصالاتك / مقابضك ، واستعلامات الخدمات ، ثم ترسل النتائج في إطار العمل التفاعلي. هذا يعني أنه يمكنك الحصول على بعض مزايا رد الفعل ، على وجه الخصوص يمكنك كتابة كود تفاعلي ، لكنه يحد بشكل خطير من فوائد قابلية التوسع التي تحاول المحاولات التفاعلية تحقيقها.

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

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

يا ستيفن! شكرا لتعليقاتكم. نقوم حاليًا بحل رد الفعل عبر JDBC من خلال تسلسل الطلبات داخل الجهات الفاعلة في تطبيقاتنا vlingo-symbio . يمكنك إنشاء العديد من JDBCObjectStoreActor بما يتناسب مع قيود الاتصال لديك ، لكن الممثلين أنفسهم يصلون إلى JDBC بشكل متزامن. والأكثر من ذلك أن عميل تطبيقات ObjectStore تعمل على الممثلين لا يحظرهم أثناء تنفيذ الاستفسارات.

ليس لدي فهم شامل لـ R2DBC ، ولكن يوصف بأنه بديل JDBC كامل ويعمل بشكل غير متزامن تمامًا كبرنامج تشغيل قاعدة بيانات. توجد حاليًا تطبيقات لـ Postgres و MS SQL Server فقط ، ولكن من المحتمل أن تنمو في الوقت المناسب. كنت أتساءل كيف سيكون شكل تطبيق Jdbi على R2DBC. أتفهم ما إذا كان هذا غير منطقي بالنسبة لك الآن ، ولكن المرجع موجود هنا في حالة حدوث ذلك في وقت ما في المستقبل. لا ضغوط :)

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

أشعر بالفضول لاستكشاف المزيد: المعايير ، وإثبات رمز المفهوم ، وما إلى ذلك ، يبدو أن هناك بعض القيود: محرك r2dbc الخاص بـ postgres يعلن أن الأنواع BLOB و CLOB لا تفعل ذلك على سبيل المثال العمل حتى الآن ، وليس هناك أي ذكر في جميع الإجراءات المخزنة أو CALL .

لكن على الأقل تركيزي شخصيًا الآن على مكان آخر ، لذلك قد يحتاج هذا إلى بعض مدخلات المجتمع واهتمامه للمضي قدمًا ، حيث ليس لدي الوقت الآن لفتح استكشاف هنا ، ولا أتخيل أن الأعضاء الأساسيين الآخرين يتطلعون إلى القفز عليها إما.

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

من الرائع رؤية هذه التذكرة.

أردت أن أسقط شيئين بسرعة لتوضيح حالة R2DBC:

  • إنها لا تزال مبادرة شابة ويجب تنفيذ أشياء مثل BLOB / CLOB ودعم الإجراءات المخزنة قبل أن نذهب إلى GA.
  • تعد برامج التشغيل تفاعلية تمامًا ولا يتم حظرها مما يعني أن جزء الإدخال / الإخراج بالكامل غير محجوب. لا يوجد تفريغ للحظر في تجمعات الخيوط.

على أي حال ، تهدف R2DBC إلى التقاط SPI بواسطة تطبيقات العميل مثل Spring Data R2DBC و R2DBC Client (غلاف صغير أعلى R2DBC SPI الذي يقرض بعض الأفكار من jdbi) والمزيد في المستقبل.

أردت فقط أن أذكر أن النموذج الأولي / طبقة العميل التوضيحية الأصلية الخاصة بي ، تم تصميم r2dbc-client بناءً على واجهات برمجة تطبيقات Jdbi وروحها. إذا اخترت إجراء مزيد من التحقيق ، أعتقد أنك ستجده مألوفًا 😄.

لقد رأيت أشخاصًا يفضحون أشياء Rx من JDBI ( hgschmie على سبيل المثال). لست متأكدًا مما قد يعنيه "الدعم" لـ R2DBC.

هل تتحدث عن تنفيذ R2DBC أعلى JDBI ، أو جعل JDBi تستهلك R2DBC Connection s ، أو تبديل JDBI للتركيز على واجهات Rx ، أو ... شيء آخر؟

أعتقد أنه سيكون "دعم برامج تشغيل R2DBC لاستخدامها من قبل JDBI ، وفضح واجهات JDBI"؟

R2DBC هو بديل غير متزامن لـ JDBC.

brianm R2DBC ليس JDBC على ThreadPools. R2DBC تعني شيئين:

  1. برامج تشغيل R2DBC عبارة عن تطبيقات تستخدم طبقة نقل غير معطلة تقوم بإرجاع أنواع org.reactivestreams.Publisher لكل عملية مرتبطة بإدخال / إخراج. لا يستخدمون برامج تشغيل JDBC تحتها لكنهم يطبقون بروتوكولات الأسلاك من البداية.
  2. R2DBC هو SPI معياري (مستقل عن البائع) يسمح ببناء مكتبات العميل في الأعلى. يمكن تبديل تطبيقات برنامج التشغيل كما هو الحال اليوم لـ JDBC.

هل تتحدث عن تنفيذ R2DBC أعلى JDBI ، حيث أن JDBi تستهلك اتصالات R2DBC

نعم ، هذا ما تعنيه في الأساس. وجود وحدة JDBI خاصة بـ R2DBC ترجع أنواع Project Reactor / RxJava2 / Zerodep.

أنا متأكد من أنني فهمت ما هو R2DBC ، وأعتقد أنه شيء جيد جدًا.

أحاول معرفة ما هو "دعم JDBI" لذلك!

ربما تكتب عينة رمز لما تتوقع القيام به عبر واجهة برمجة تطبيقات JDBI؟

ماذا عن دعم ما يلي بالنسبة للمبتدئين:

Jdbi jdbi = Jdbi.create("r2dbc:h2:mem:///test"); // (H2 in-memory database), obtain ConnectionFactory via ConnectionFactories.get(String url)

// Reactor style:
Flux<User> users = jdbi.withHandle(handle -> {

    return handle.execute("CREATE TABLE user (id INTEGER PRIMARY KEY, name VARCHAR)")

        .then(handle.execute("INSERT INTO user(id, name) VALUES (?0, ?1)", 0, "Alice"))

        .then(handle.createUpdate("INSERT INTO user(id, name) VALUES (?0, ?1)")
            .bind(0, 1)
            .bind(1, "Bob")
            .execute())
         .then(handle.createQuery("SELECT * FROM user ORDER BY name")
              .mapToBean(User.class).many());
});

// RxJava style
Flowable<User> users = jdbi.withHandle(handle -> { … });

قد يبدو الدعم المستند إلى الواجهة كما يلي:

public interface UserDao {
    @SqlUpdate("CREATE TABLE user (id INTEGER PRIMARY KEY, name VARCHAR)")
    Completable createTableRxJava();

    @SqlUpdate("CREATE TABLE user (id INTEGER PRIMARY KEY, name VARCHAR)")
    Mono<Void> createTableProjectReactor();

    @SqlQuery("SELECT * FROM user ORDER BY name")
    @RegisterBeanMapper(User.class)
    Flowable<User> listUsersRxJava();

    @SqlQuery("SELECT * FROM user ORDER BY name")
    @RegisterBeanMapper(User.class)
    Flux<User> listUsersProjectReactor();
}

أنا لست آرائي حول RxJava مقابل Project Reactor ، لذلك حاولت سرد المتغيرات باستخدام كل من واجهات برمجة التطبيقات.

هل يمكن لشخص ما أن يوضح بالضبط ما هو مقترح هنا؟

هل R2DBC عبارة عن طبقة فوق JDBC ، أم طبقة خاصة بها؟ لأن Jdbi يقترن بـ JDBC في أقصى الحدود.

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

سيكون الاقتراح هنا عبارة عن واجهة برمجة تطبيقات تبدو وتعمل مثل Jdbi ولكنها تستخدم أسفل برامج تشغيل R2DBC. بدلاً من إرجاع الكائنات العددية ، تقوم واجهة برمجة التطبيقات بإرجاع أنواع التدفقات التفاعلية.

شكرا على التوضيح. أتوقع أن تكون الخطوة الأولى هنا هي وضع نموذج أولي لشوكة أو فرع Jdbi الذي يخدم الحد الأدنى من PoC يوضح كيفية تنفيذ الأمثلة المذكورة أعلاه أعلى R2DBC. من هناك سيتعين علينا تحديد مسار نحو التكامل بالتوازي مع دعم JDBC الحالي ، أو إثبات أنه سيكون أفضل باعتباره شوكة صلبة. كما يشير ماثيو أعلاه ، نحن مرتبطون بشدة بـ JDBC حاليًا ، ومن المرجح أن يتطلب التغيير الكثير من العمل الشاق وكذلك قد يتطلب تغيير التغييرات.

أنا متحمس لوجود هذا على رادار المشروع على المدى الطويل ، لكنني لا أتوقع أن يتحرك بسرعة دون مشاركة مجتمعية كبيرة.

stevenschlansker لقد أنشأنا في البداية r2dbc-client المستوحى من JDBI. ما رأيك في طلب السحب / PoC الذي يقدم وحدة r2dbc ( jdbi-r2dbc ) كمساهمة من R2DBC Client مرة أخرى في JDBI على غرار:

ConnectionFactory cf = …;

Rdbi rdbi = new Rdbi(cf);

rdbi.inTransaction(handle ->
    handle.execute("INSERT INTO test VALUES ($1)", 100))

    .thenMany(rdbi.inTransaction(handle ->
        handle.select("SELECT value FROM test")
            .mapResult(result -> result.map((row, rowMetadata) -> row.get("value", Integer.class)))))

    .subscribe(System.out::println);

رائع جدا. نعم ، إذا كان من الممكن دمج العمل بطريقة سلسة إلى حد معقول ، فسيسعدنا احتضانه في وحدة نمطية!

سيكون من الرائع أن تأتي واجهة برمجة تطبيقات Rdbi بطريقة ما من " Jdbi - في ذلك عندما تقوم بعمل jdbi.installPlugin(...).registerRowMapper(...) ثم أي حالات Rdbi تأتي" من "أن Jdbi يحصل أيضًا على التكوين الخاص بهم. سيكون من الجيد أيضًا أن تكون قادرًا على القيام بأشياء مثل <strong i="11">@SqlUpdate</strong> CompletableFuture<ResultType> doSomeWork(...); أو أيًا كان النوع التفاعلي المناسب.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات