In this post the authors say that Apache Ignite supports strong consistency and they list a code sample which uses key-values. But I was unable to find a mention of the same in the docs for SQL.
Does Apache Ignite support strong consistency in SQL mode? If it does, will I be able to use it's other features (transactions, ACID properties) with strong consistency turned on? What is the performance hit by having full consistency turned on?
Any pointers to the right documentation will be very helpful!
In short, Apache Ignite has an experimental transactional SQL and MVCC support, though it's not recommended to use it in the production environment. I'd suggest you use the cache API for now if you need strong consistency.
From the MVCC docs:
Beta version of Transactional SQL and MVCC In Ignite v2.7,
Transactional SQL and MVCC are released as beta versions to allow
users to experiment and share feedback. This version of Transactional
SQL and MVCC should not be considered for production.
SQL transactions (BETA) docs: here and here
According to this reply on the Dev mailing list Apache ignite SQL is strongly consistent but is not transactional
Related
We have been using Aeropsike exentsively as key-value store only. However now I couldn't find a way to actually save a lock in Aeropspike like the way we do in Redis.
I guess, I can always save native application lock as blobs, but that means I will be limited to a particular implementation in my application.
Don't believe you can "save" locks in Aerospike. Any form of locking has to be implemented at the Application level and then you have to deal with the locking client abandoning the lock.
I would suggest that you read Martin Kleppmann's Redlock Discussion. It covers the responses people in the distributed systems community had to Antirez's debating the topic, following Kleppmann's earlier article How to do distributed locking.
Building a DLM is not a trivial problem at all, and Redlock fails as one. If you are up for it, you can consider writing such a thing over the linearizable strong consistency mode of Aerospike Enterprise Edition 4.0.
As opposed to Redis and its variants, Aerospike EE 4.0 passes Jepsen.
We're using Redis but considering Infinispan. Redis supports list, hashset, set, and sorted set, and offers native functions to operate over those structures, but does Infinispan support the same?
I know Infinispan will store any Java object, but Redis offers functions that operate on elements without having to explicitly retrieve them. I was wondering if Infinispan supports the same.
Infinispan does not support this out-of-the-box - there is some support for AtomicHashMaps, although I've heard that there may be issues with those.
The main feature you should be looking for is the DeltaAware interface - this allows you to build such collections, sending just the 'operation' that should be executed on the value.
There were some attempts to do so - check out infinispan-contrib (though I don't have any experience with that).
I'm looking to create SQL database on my Mac and I was wondering what would be the optimal software I can create/operate it with.
Any advise will be highly appreciated.
Postgres
Postgres is a mature heavy-duty enterprise-quality database system. Postgres aims to implement the SQL specifications as closely as is practicable. Postgres is open-source and free-of-cost. Multiple companies sell professional support services. Conferences dedicated to Postgres occur year-round all over the globe including in Ottawa where the core contributors meet. The more I learn about Postgres, the more impressed I become.
There are different ways to install on a Mac:
The usual way is to run an installer provided as a courtesy by the EnterpriseDB.com company. For security, the installer creates a new Unix user on your Mac named "postgres" and creates folders accessible only to that user rather than your regular User account.
Another way to run Postgres is a unique configuration packaged as a Mac app, called Postgres.app, provided as a courtesy by the Heroku company.
MySQL & MariaDB
MySQL (and MariaDB) is a competitor to Postgres, and is quite popular. But MySQL pales in comparison to Postgres in my opinion, in regards to quality, robustness, stability, security, documentation, responsible gradual planned development, focus on safety of your data, openness, and more considerations.
The more I learn about MySQL, the less impressed I became. But MySQL is very popular. You will find many resources, books, and postings on MySQL. But its popularity eludes me. MySQL versus Postgres is like Linux versus BSD, the one seems superior in so many technical categories yet the other gets all the popular hype.
But no need to start a flame-war: check it out and make your own decision.
SQLite
SQLite is another open-source free-of-cost SQL engine. But as the name suggests, it is aimed at relatively small simple purposes. Apple bundles SQLite with both Mac OS X and iOS.
H2 Database Engine
If you are savvy with Java, you might consider the H2 Database Engine. Simple to get started with. Mainly aimed at embedding in an app, though you can use it as a database server. Though it lacks many server features, it may be a good way to get started.
Derby
Derby is another Java-based database engine for both embedded use as well as server. Originally a commercial product, later acquired by IBM and then donated to Apache as an open-source free-of-cost project. There have been some issues with heavy use in production, so research the current state of development. H2 seems to be a better choice over Derby, currently.
Firebird
FirebirdSQL in another open-source database, but I've no experience. Seems to have engaged a new wave of interest and development in recent years.
OpenBase
OpenBase is a commercial database server originally developed for NeXTSTEP/OpenStep (which evolved into Mac OS X that we know today).
Interbase
Another commercial server is Interbase by Embarcadero Technologies.
4D
4D (formerly 4th Dimension) is a unique kind of database server, originally developed on the classic Mac and lives today on both Mac OS X and Windows. 4D is special because it is a competent relational database server but has a proprietary query language rather than SQL. 4D is also special because it is integrated with its own programming tool-set that includes a visual form-layout development environment. Other development tools can access its data through Web Services calls (SOAP, JSON, etc.), plugins, and other mechanisms.
My view
My own choices for projects of late have been:
Postgres, for heavy-duty mission-critical purposes where preserving data is paramount.
H2, for lighter uses, and especially where portability is important. Being Java-based, it can run anywhere.
Does HSQLDB support replication or clustering. I found an age old experimental feature for HSQLDB replication.
see http://www.jgroups.org/hsqldbr.html and www.jgroups.org/hsqldbr/design.pdf
but it seems this feature never made its way to hsqldb.
Does anyone know what is the current status of this feature and whether or not hsqldb support replication/clustering?
Edit: We used HA-JDBC and found it to be quite useful for our need. Initially, I thought HA-JDBC is a dead project because there were no releases for the past 3 years, but it being maintained in a SVN repository and new features are being added in GIT repository.
This feature is supported by add-ons C-JDBC and HA-JDBC as listed on this page. Replication and clustering has many variations and these software package cover different feature sets.
http://hsqldb.org/web/hsqlUsing.html
I am developing AMF Flash gateway on FlourineFx application for deployment on Windows Azure and I want to use Azure SQL.
I use NHibernate 2.1 + NHibernate.Linq 1.0 + FluentNHibernate 1.1
There will be two or more instances of this FlourineFx gateway and only 1 database.
I am planning on implementing memcached as 2nd level cache later (as Windows Azure WorkerRole), but is it necessary?
(I don't mind performance, but I do mind consistency)
I don't know if 2nd level cache solves some transaction-related problems or just makes it faster
The main point of the L2 cache is to avoid database hits and I wouldn't say that the L2 cache solves transactions-related problems; It might just be involved (and thus make the whole process a bit more complicated), if fully transactional caches are supported by NHibernate.
Personally, I tend to limit the use of L2 caching to read-only (or mostly read) objects, that's where the L2 cache gives all its power. Caching read-write entities is trickier, especially in a clustered environment, and the cache provider must support the Cache Concurrency Strategy required by your application for a given entity (read-only, non-strict-read-write, read-write).
I'm not sure this really answers the question, but at least it might give you some hints.
References
17.2. The Second Level Cache
Chapter 23, NHibernate.Caches
The cache won't help you with consistency. Of course it will help with performance, and you should use a distributed one, like memcached, if running multiple instances, as you correctly inferred.
That said, NHibernate does have features to help with consistency. Check:
5.1.7. version
10.4. Optimistic concurrency control
No, you don't.
But, how you guys helped me point to the right direction, it will help with performance.
So I will definitely run some instances of memcached and investigate concurrency control further.
Thanks.