best approach to connect my custom database to multiple BI tools? - database

I'm developing a read-only SQL engine, with an API that can execute SELECT queries (but no other SQL queries).
My question is how to make it available to as many Business Intelligence/Dashboard tools as possible.
I see 2 possible approaches (maybe I missed others):
develop a JDBC driver, and ship it to my user, so that they can install it and connect to my service. This is rather straight-forward, but would only work for BI tools that accept installing JDBC drivers
try to implement a well known SQL protocol, such as postgresql protocol, so that user can use their regular psql connector in their BI tool. I'm tempted to try this, but I haven't seen it in other product and looks a bit hacky.
What do you think? Option 2 looks the most generic to me, but risky. Is it a sensible approach?
Could I do something else? Or implement, server-side, another generally-accepted protocol?
thx

Variant 2 seems to be more promising in the long term. It is almost unreal that BI tools will add a connector for your proprietary API/protocol as most likely your product is a niche solution.
For example, QuestDB finally adds Postgre-compatible endpoint, SingleStore is accessed with MySql drivers, ClickHouse has plans to add Postgre-endpoint in addition to existing own HTTP/binary protocols.
You mentioned JDBC, so maybe it would be easier to have an endpoint compatible with Presto/Trino REST API (many BI tools already have drivers for PrestoDB).

Related

NoSQL Offline/Standalone - Query GraphDB File directly without exe application?

Every relationship database can be used without the need for installation of any software or tools, as most of the query read/write is all done to read a file that stores data in a specific format.
Can the same thing be done with a graph database (doesnt have to be neo4j, i wouldnt mind an alternative) without installing software, or having terminal endpoint running for access to database?
Example:
MySql is a db file you can query
MSSQL is a db file you can query
SqlCE is a db file you can query
Sqlite is a db file you can query
Neo4j: You need to download, install, have running and query through ip address?
OR... pay higher rates (2-5x cost?) for graph DB hosting in comparison to RDMS which is so inexpensive, it's practically given for free for most web hosting services.
Purpose and Reasoning for Question
I'm looking for some cost efficient solutions to run a graph database
with all the bells and whistles, that i can run from web host or
application (that only handle IIS and hard-file transfer services --
maybe it can do netcore, but dont know if you can run graphdb through
netcore as a module service).
Yeah, MSSQL is doing it now, but it's
limited in what it can do and handle, as well as the tutorials are
lacking in how to properly write NoSQL queries as fluent as the SQL
stuff...
Well, i found the answer to my question, and it's "yes, you can create a standalone graph.db to query from (in neo4j)." However it's only limited to Java and not supported by other languages or frameworks.
Neo4j calls it an "embedded" database. Which is exactly what i was asking in my question, though i was hoping to be able to use the services in a .net application, which turns out to not be compatible.
If anyone has any alternate solutions that can work with netcore, i would love to see it posted here. I'm happy to know that i was right, and that it is possible to run queries on a hard file. Just disappointed that because neo4j is native to java, the technology is only available to java apps. Has no one written a c# port yet? (Not in-memory, but to and from hard file.)
Anyways, i'll continue to research and look more into all of this. Thank you.
Edit-1: Graph database for .NET

How to support both PostgreSQL and SQL Server in a Node.JS application?

I'm currently developing a Node.js app that needs to be able to switch between PostgreSQL and SQL Server databases. Both databases have identical tables and the operations will also be identical (basic CRUD, nothing fancy).
I've done research, and know that there are enough libraries around to access both databases.
Ideally I'd like to use a ORM and just let that handle the differences. However, I can't seem to find an ORM framework that does both. In fact, I can't locate any ORM that supports SQL Server, while almost all support Postgres.
So my question: is there an ORM that supports both? And if there isn't, are there other abstraction tools/frameworks around that will make my developer life easier?
There is a certain amount of YAGNI here, but if you are unable to find an ORM that supports both, your next best bet is to just use an Adapter Pattern and ensure you're not using the ORM directly in your code, but through a wrapper. Then if / when you need support for SQL Server, you can create the implementation for the wrapper which will replace the PostgreSQL implementation.

Choosing database and licensing for Delphi application

We have Delphi XE2. We are looking for a database for our application. We have tried Absolute Database and it supports most of SQL commands we need. I see most of Delphi users choose Firebird but it seems to hard to work with. I am so much confused about databases and licenses. Here are my problems:
When we choose a database, let's say Absolute Database, Firebird, MySql embedded etc. and if we have for example 3.000 customers, do we still need to pay to Database developers? Or is it one time fee? I am so much confused because they say when we buy, we can use it inside our building ( http://www.componentace.com/order/licenses.php ). But when we release our software, our customers will need to use the same database of course.
Absolute DB is easy to install and supports most of SQL queries. Firebird does not support most of SQL queries. Is this correct?
When we try to use Firebird, we use FlameRobin to design database. But when we try to connect using IB components, it says "Unable to connect database".
Thank you very much...
Firebird has no licensing fees at all. However, it's smart to help maintain this great project once you rely on it. There is a lot of ways to help Firebird project:
http://www.firebirdsql.org/#consider-your-contribution
Not correct. Firebird is very powerful and supports most SQL standards plus a great SQL extensions for stored procedures and triggers
Check your database connection string. It's usually something like server_ip:full_db_path if you're connecting over a network, or just full_db_path if local. You can always use an ALIAS in place of full_db_path. Make sure you have Firebird server running or, if using embedded, if it's installed correctly. Firebird has a great and very complete documentation and one of the best support groups on open source projects.
It depends on database. Absolute Database is embedded database, everything is included in your exe. Most database engines however are standalone, so they are installed as applications. It looks like if you buy commercial Absolute Database licence, no royalties are needed: http://www.componentace.com/order/order_product.php?id=8
Firebird supports most SQL standards. According to this answer, most SQL compliant embedded database is Firebird: Which embedded database has maximum SQL compliance, and concurrency support?
You must have some configuration issues with IB components, hard to say more without more information. On the otherhand, IB components are for Interbase, so you might find something else better, like UIB.
If you'll choose Firebird, then take a look at IBExpert. This is absolutely the best administration tool available for Firebird. But not cheap. =(
You should also look at Interbase, also marketed by Embarcadero, the Delphi vendor. Interbase is not the same thing as Firebird, which is probably why the IB components you mentioned didn't work.
Yes, each customer will usually have to purchase the IB database. However, there are additional choices with Interbase, depending on how you structure your application. Check how they work and see if they can fit better with what you are trying to do.

How To Store / Query Data In VB.NET?

At the moment I am using Access & an OleDb connection to store data. I went down this route originally because I though that this was the best way for applications that I am distributing to my clients.
I would prefer to use something like SQL Server but is this a good idea for software I am distributing? Does the average Joe's PC have SQL Server pre-installed? If not, I suppose I can provide them with a link to download it for free?
Is there any better alternatives to Access / SQL Server?
You can use SQL Server CE and bundle the database with your application.
See this How to on MSDN.
You haven't really given enough information to answer this specifically but I'll answer generally:
Does the average Joe's PC have SQL Server pre-installed?
No.
If not, I suppose I can provide them with a link to download it for free?
Yes, Microsoft has fairly generous 'free' versions of SQL server Express for small database sizes (<1GB) and small numbers of CPU's (1). Check here.
Are there any better alternatives to Access / SQL Server?
It depends on your app, your skill and how you define better.
If you are running sql-server you can very easily use linq2sql and have strongly typed data base objects that offer clean vb.net code. The linq technologies are worth learning IMO. The tools in VS2010 work well with sql-server databases. Other more modern Microsoft tools are available too that integrate very easily (entity framework and lightswitch (which I don't have experience with)).
For small local databases sqlite works well. If your project is very small and the sql is simple this is a very light weight solution. This is very small and very fast and is used everywhere.
If a server is needed and low cost matters mysqlis a solid open source server though it is now under private ownership.
Again depending upon your application off-site hosting of a database might be a viable solution. I have a client that is still running their db in the cloud with a low cost 2008 SQL Server provider.

FluentNHibernate SQL Server 2005/2008 Setup Tutorial

Does anybody know of any good tutorials that show how to configure FluentNhibernate for SQL Server 2005/2008. The ones I have found usually just use SQLite, but I would like to see one that specifically targets SQL Server 2005/2008.
I really liked the sample tutorial on the FluentNhibernate website (http://wiki.fluentnhibernate.org/Getting_started#Your_first_project), but it looks like most tutorials I have found seem to only deal with SQLite. It would be great to see a working tutorial that deals with the more common databases in real world applications like SQL Server 2005/2008, MySQL, etc
Thanks!
Tutorials use SQLite not because it's "quick & dirty" but because it's embedded, small, and free. Anyone can download System.Data.SQLite and start working in about 60 seconds, and later switch (or not) to another database with minimum impact. That's one of the major benefits of using an ORM.
Just in case, I want to clarify that SQLite is not a toy database, for many applications it's enough and even necessary since the characteristics I mentioned above aren't too common for a relational databse.
In the case of fluent-nhibernate, the only difference is that instead of:
Fluently.Configure()
.Database(
SQLiteConfiguration.Standard
.UsingFile("firstProject.db"))...
you'll have:
Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2005
.ConnectionString("a raw string"))...
Each database engine config has its own specific optional settings.
More information about configuring different databases in the fluent-nhibernate wiki.

Resources