Thread overview
ddbc with Vibe-d
Feb 12, 2023
Steve
Feb 12, 2023
Steve
Feb 12, 2023
Steve
Feb 13, 2023
Steve
February 12, 2023

Hi,

I'm trying D for the first time and so far I'm really impressed with both D and vibe-d.

My test project is an application server and I want to use SQLite3 as its database. I understand Vibe.d uses an async model under the hood and so my question is are Vibe-d and ddbc compatible?

Thanks.

February 12, 2023

On 2/12/23 6:05 AM, Steve wrote:

>

Hi,

I'm trying D for the first time and so far I'm really impressed with both D and vibe-d.

My test project is an application server and I want to use SQLite3 as its database. I understand Vibe.d uses an async model under the hood and so my question is are Vibe-d and ddbc compatible?

Thanks.

Any synchronous calls will just be synchronous. They aren't going to participate in the async i/o that vibe uses.

In other words, when you block on a call to sqlite, it will block everything else in your web server until that completes.

There are several projects that are built to work with vibe-d sockets. mysql-native is one, and vibe-d-postgresql is another.

I don't know if there is an sqlite project that is vibe-specific. But sqlite typically is using files anyway, or maybe even memory, so you aren't waiting on network i/o.

-Steve

February 12, 2023

On Sunday, 12 February 2023 at 15:24:14 UTC, Steven Schveighoffer wrote:

>

Any synchronous calls will just be synchronous. They aren't going to participate in the async i/o that vibe uses.

In other words, when you block on a call to sqlite, it will block everything else in your web server until that completes.

Would this be the correct approach to stop it blocking?:

auto result = async(&doSqliteStuff, args...).getResult();
February 12, 2023
On 2/12/23 1:01 PM, Steve wrote:
> On Sunday, 12 February 2023 at 15:24:14 UTC, Steven Schveighoffer wrote:
>> Any synchronous calls will just be synchronous. They aren't going to participate in the async i/o that vibe uses.
>>
>> In other words, when you block on a call to sqlite, it will block everything else in your web server until that completes.
>>
> 
> 
> Would this be the correct approach to stop it blocking?:
> ```d
> auto result = async(&doSqliteStuff, args...).getResult();
> ```

That might work, depending on args. As documented in the API, if anything in args are mutable references, then it is run as a task, and the same problem still applies (it will use a fiber, and count on the concurrency of vibe's fibers to deal with the asynchronicity).

If it is possible, it will run in a worker thread, and then it can execute concurrently.

I believe you can do:

isWeaklyIsolated!(typeof(args))

to see if it will run in another thread.

I admit not having any experience with this function.

-Steve
February 12, 2023

On Sunday, 12 February 2023 at 19:38:47 UTC, Steven Schveighoffer wrote:

>

That might work, depending on args. As documented in the API, if anything in args are mutable references, then it is run as a task, and the same problem still applies (it will use a fiber, and count on the concurrency of vibe's fibers to deal with the asynchronicity).

If it is possible, it will run in a worker thread, and then it can execute concurrently.

I believe you can do:

isWeaklyIsolated!(typeof(args))

to see if it will run in another thread.

I admit not having any experience with this function.

-Steve

In my case args will just be the body of the HTTPServerRequest which is JSON. How can I get that JSON and pass it to async() in a manner that ensures I get a worker thread?

February 12, 2023

On 2/12/23 3:29 PM, Steve wrote:

>

In my case args will just be the body of the HTTPServerRequest which is JSON. How can I get that JSON and pass it to async() in a manner that ensures I get a worker thread?

I think it needs to be immutable if it's a reference.

-Steve

February 13, 2023

On Monday, 13 February 2023 at 01:43:38 UTC, Steven Schveighoffer wrote:

>

I think it needs to be immutable if it's a reference.

-Steve

I have tested args with isWeaklyIsolated!(typeof(arg)) and it looks like good news 👍️

Thanks for your help, Steve.