Repository files navigation

DataStax C# Driver for Apache Cassandra

A modern, feature-rich and highly tunable C# client library for Apache Cassandra (1.2+) and DataStax Enterprise (3.1+) using exclusively Cassandra's binary protocol and Cassandra Query Language v3.

Installation

Get it on Nuget

PM> Install-Package CassandraCSharpDriver

Build statusWindows Build statusLatest stable

Features

  • Sync and Async API
  • Simple, Prepared, and Batch statements
  • Asynchronous IO, parallel execution, request pipelining
  • Connection pooling
  • Auto node discovery
  • Automatic reconnection
  • Configurable load balancing and retry policies
  • Works with any cluster size
  • Linq2Cql and Ado.Net support

Documentation

Getting Help

You can use the project Mailing list or create a ticket on the Jira issue tracker.

Upgrading from previous versions

If you are upgrading from the 2.1 branch of the driver, be sure to have a look at the upgrade guide.

If you are upgrading from the 1.x branch of the driver, follow the upgrade guide to 2.0, and then the above document.

Basic Usage

//Create a cluster instance using 3 cassandra nodes.varcluster=Cluster.Builder().AddContactPoints("host1","host2","host3").Build();//Create connections to the nodes using a keyspacevarsession=cluster.Connect("sample_keyspace");//Execute a query on a connection synchronouslyvarrs=session.Execute("SELECT * FROM sample_table");//Iterate through the RowSetforeach(varrowinrs){varvalue=row.GetValue<int>("sample_int_column");//do something with the value}

Prepared statements

Prepare your query once and bind different parameters to obtain best performance.

//Prepare a statement oncevarps=session.Prepare("UPDATE user_profiles SET birth=? WHERE key=?");//...bind different parameters every time you need to executevarstatement=ps.Bind(newDateTime(1942,11,27),"hendrix");//Execute the bound statement with the provided parameterssession.Execute(statement);

Batching statements

You can execute multiple statements (prepared or unprepared) in a batch to update/insert several rows atomically even in different column families.

//Prepare the statements involved in a profile update oncevarprofileStmt=session.Prepare("UPDATE user_profiles SET email=? WHERE key=?");varuserTrackStmt=session.Prepare("INSERT INTO user_track (key, text, date) VALUES (?, ?, ?)");//...you should reuse the prepared statement//Bind the parameters and add the statement to the batch batchvarbatch=newBatchStatement().Add(profileStmt.Bind(emailAddress,"hendrix")).Add(userTrackStmt.Bind("hendrix","You changed your email",DateTime.Now));//Execute the batchsession.Execute(batch);

Asynchronous API

Session allows asynchronous execution of statements (for any type of statement: simple, bound or batch) by exposing the ExecuteAsync method.

//Execute a statement asynchronously using awaitvarrs=awaitsession.ExecuteAsync(statement);

Avoid boilerplate mapping code

The driver features a built-in Mapper and Linq components that can use to avoid boilerplate mapping code between cql rows and your application entities.

Useruser=mapper.Single<User>("SELECT name, email FROM users WHERE id = ?",userId);

See the driver components documentation for more information.

Automatic pagination of results

You can iterate indefinitely over the RowSet, having the rows fetched block by block until the rows available on the client side are exhausted.

varstatement=newSimpleStatement("SELECT * from large_table");//Set the page size, in this case the RowSet will not contain more than 1000 at any timestatement.SetPageSize(1000);varrs=session.Execute(statement);foreach(varrowinrs){//The enumerator will yield all the rows from Cassandra//Retrieving them in the back in blocks of 1000.}

User defined types mapping

You can map your Cassandra User Defined Types to your application entities.

For a given udt

CREATETYPE address (
street text,
city text,
zip_code int,
phones set<text>
);

For a given class

publicclassAddress{publicstringStreet{get;set;}publicstringCity{get;set;}publicintZipCode{get;set;}publicIEnumerable<string>Phones{get;set;}}

You can either map the properties by name

//Map the properties by name automaticallysession.UserDefinedTypes.Define(UdtMap.For<Address>());

Or you can define the properties manually

session.UserDefinedTypes.Define(UdtMap.For<Address>().Map(a =>a.Street,"street").Map(a =>a.City,"city").Map(a =>a.ZipCode,"zip_code").Map(a =>a.Phones,"phones"));

You should map your UDT to your entity once and you will be able to use that mapping during all your application lifetime.

varrs=session.Execute("SELECT id, name, address FROM users where id = x");varrow=rs.First();//You can retrieve the field as a value of type AddressvaruserAddress=row.GetValue<Address>("address");Console.WriteLine("user lives on {0} Street",userAddress.Street);

Setting cluster and statement execution options

You can set the options on how the driver connects to the nodes and the execution options.

//Example at cluster levelvarcluster=Cluster.Builder().AddContactPoints(hosts).WithCompression(CompressionType.LZ4).WithLoadBalancingPolicy(newDCAwareRoundRobinPolicy("west"));//Example at statement (simple, bound, batch) levelvarstatement=newSimpleStatement(query).SetConsistencyLevel(ConsistencyLevel.Quorum).SetRetryPolicy(DowngradingConsistencyRetryPolicy.Instance).SetPageSize(1000);

Feedback Requested

Help us focus our efforts! Provide your input on the Platform and Runtime Survey (we kept it short).

Building and running the tests

You can use Visual Studio or msbuild to build the solution.

Check the documentation for building the driver from source and running the tests.

License

Copyright 2012-2015, DataStax.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

DataStax .NET Driver for Apache Cassandra

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

DataStax C# Driver for Apache Cassandra

A modern, feature-rich and highly tunable C# client library for Apache Cassandra (1.2+) and DataStax Enterprise (3.1+) using exclusively Cassandra's binary protocol and Cassandra Query Language v3.

Installation

Get it on Nuget

PM> Install-Package CassandraCSharpDriver

Build statusWindows Build statusLatest stable

Features

  • Sync and Async API
  • Simple, Prepared, and Batch statements
  • Asynchronous IO, parallel execution, request pipelining
  • Connection pooling
  • Auto node discovery
  • Automatic reconnection
  • Configurable load balancing and retry policies
  • Works with any cluster size
  • Linq2Cql and Ado.Net support

Documentation

Getting Help

You can use the project Mailing list or create a ticket on the Jira issue tracker.

Upgrading from previous versions

If you are upgrading from the 2.1 branch of the driver, be sure to have a look at the upgrade guide.

If you are upgrading from the 1.x branch of the driver, follow the upgrade guide to 2.0, and then the above document.

Basic Usage

//Create a cluster instance using 3 cassandra nodes.varcluster=Cluster.Builder().AddContactPoints("host1","host2","host3").Build();//Create connections to the nodes using a keyspacevarsession=cluster.Connect("sample_keyspace");//Execute a query on a connection synchronouslyvarrs=session.Execute("SELECT * FROM sample_table");//Iterate through the RowSetforeach(varrowinrs){varvalue=row.GetValue<int>("sample_int_column");//do something with the value}

Prepared statements

Prepare your query once and bind different parameters to obtain best performance.

//Prepare a statement oncevarps=session.Prepare("UPDATE user_profiles SET birth=? WHERE key=?");//...bind different parameters every time you need to executevarstatement=ps.Bind(newDateTime(1942,11,27),"hendrix");//Execute the bound statement with the provided parameterssession.Execute(statement);

Batching statements

You can execute multiple statements (prepared or unprepared) in a batch to update/insert several rows atomically even in different column families.

//Prepare the statements involved in a profile update oncevarprofileStmt=session.Prepare("UPDATE user_profiles SET email=? WHERE key=?");varuserTrackStmt=session.Prepare("INSERT INTO user_track (key, text, date) VALUES (?, ?, ?)");//...you should reuse the prepared statement//Bind the parameters and add the statement to the batch batchvarbatch=newBatchStatement().Add(profileStmt.Bind(emailAddress,"hendrix")).Add(userTrackStmt.Bind("hendrix","You changed your email",DateTime.Now));//Execute the batchsession.Execute(batch);

Asynchronous API

Session allows asynchronous execution of statements (for any type of statement: simple, bound or batch) by exposing the ExecuteAsync method.

//Execute a statement asynchronously using awaitvarrs=awaitsession.ExecuteAsync(statement);

Avoid boilerplate mapping code

The driver features a built-in Mapper and Linq components that can use to avoid boilerplate mapping code between cql rows and your application entities.

Useruser=mapper.Single<User>("SELECT name, email FROM users WHERE id = ?",userId);

See the driver components documentation for more information.

Automatic pagination of results

You can iterate indefinitely over the RowSet, having the rows fetched block by block until the rows available on the client side are exhausted.

varstatement=newSimpleStatement("SELECT * from large_table");//Set the page size, in this case the RowSet will not contain more than 1000 at any timestatement.SetPageSize(1000);varrs=session.Execute(statement);foreach(varrowinrs){//The enumerator will yield all the rows from Cassandra//Retrieving them in the back in blocks of 1000.}

User defined types mapping

You can map your Cassandra User Defined Types to your application entities.

For a given udt

CREATETYPE address (
street text,
city text,
zip_code int,
phones set<text>
);

For a given class

publicclassAddress{publicstringStreet{get;set;}publicstringCity{get;set;}publicintZipCode{get;set;}publicIEnumerable<string>Phones{get;set;}}

You can either map the properties by name

//Map the properties by name automaticallysession.UserDefinedTypes.Define(UdtMap.For<Address>());

Or you can define the properties manually

session.UserDefinedTypes.Define(UdtMap.For<Address>().Map(a =>a.Street,"street").Map(a =>a.City,"city").Map(a =>a.ZipCode,"zip_code").Map(a =>a.Phones,"phones"));

You should map your UDT to your entity once and you will be able to use that mapping during all your application lifetime.

varrs=session.Execute("SELECT id, name, address FROM users where id = x");varrow=rs.First();//You can retrieve the field as a value of type AddressvaruserAddress=row.GetValue<Address>("address");Console.WriteLine("user lives on {0} Street",userAddress.Street);

Setting cluster and statement execution options

You can set the options on how the driver connects to the nodes and the execution options.

//Example at cluster levelvarcluster=Cluster.Builder().AddContactPoints(hosts).WithCompression(CompressionType.LZ4).WithLoadBalancingPolicy(newDCAwareRoundRobinPolicy("west"));//Example at statement (simple, bound, batch) levelvarstatement=newSimpleStatement(query).SetConsistencyLevel(ConsistencyLevel.Quorum).SetRetryPolicy(DowngradingConsistencyRetryPolicy.Instance).SetPageSize(1000);

Feedback Requested

Help us focus our efforts! Provide your input on the Platform and Runtime Survey (we kept it short).

Building and running the tests

You can use Visual Studio or msbuild to build the solution.

Check the documentation for building the driver from source and running the tests.

License

Copyright 2012-2015, DataStax.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

DataStax .NET Driver for Apache Cassandra

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DataStax C# Driver for Apache Cassandra

A modern, feature-rich and highly tunable C# client library for Apache Cassandra (1.2+) and DataStax Enterprise (3.1+) using exclusively Cassandra's binary protocol and Cassandra Query Language v3.

Installation

Get it on Nuget

PM> Install-Package CassandraCSharpDriver

Build statusWindows Build statusLatest stable

Features

  • Sync and Async API
  • Simple, Prepared, and Batch statements
  • Asynchronous IO, parallel execution, request pipelining
  • Connection pooling
  • Auto node discovery
  • Automatic reconnection
  • Configurable load balancing and retry policies
  • Works with any cluster size
  • Linq2Cql and Ado.Net support

Documentation

Getting Help

You can use the project Mailing list or create a ticket on the Jira issue tracker.

Upgrading from previous versions

If you are upgrading from the 2.1 branch of the driver, be sure to have a look at the upgrade guide.

If you are upgrading from the 1.x branch of the driver, follow the upgrade guide to 2.0, and then the above document.

Basic Usage

//Create a cluster instance using 3 cassandra nodes.varcluster=Cluster.Builder().AddContactPoints("host1","host2","host3").Build();//Create connections to the nodes using a keyspacevarsession=cluster.Connect("sample_keyspace");//Execute a query on a connection synchronouslyvarrs=session.Execute("SELECT * FROM sample_table");//Iterate through the RowSetforeach(varrowinrs){varvalue=row.GetValue<int>("sample_int_column");//do something with the value}

Prepared statements

Prepare your query once and bind different parameters to obtain best performance.

//Prepare a statement oncevarps=session.Prepare("UPDATE user_profiles SET birth=? WHERE key=?");//...bind different parameters every time you need to executevarstatement=ps.Bind(newDateTime(1942,11,27),"hendrix");//Execute the bound statement with the provided parameterssession.Execute(statement);

Batching statements

You can execute multiple statements (prepared or unprepared) in a batch to update/insert several rows atomically even in different column families.

//Prepare the statements involved in a profile update oncevarprofileStmt=session.Prepare("UPDATE user_profiles SET email=? WHERE key=?");varuserTrackStmt=session.Prepare("INSERT INTO user_track (key, text, date) VALUES (?, ?, ?)");//...you should reuse the prepared statement//Bind the parameters and add the statement to the batch batchvarbatch=newBatchStatement().Add(profileStmt.Bind(emailAddress,"hendrix")).Add(userTrackStmt.Bind("hendrix","You changed your email",DateTime.Now));//Execute the batchsession.Execute(batch);

Asynchronous API

Session allows asynchronous execution of statements (for any type of statement: simple, bound or batch) by exposing the ExecuteAsync method.

//Execute a statement asynchronously using awaitvarrs=awaitsession.ExecuteAsync(statement);

Avoid boilerplate mapping code

The driver features a built-in Mapper and Linq components that can use to avoid boilerplate mapping code between cql rows and your application entities.

Useruser=mapper.Single<User>("SELECT name, email FROM users WHERE id = ?",userId);

See the driver components documentation for more information.

Automatic pagination of results

You can iterate indefinitely over the RowSet, having the rows fetched block by block until the rows available on the client side are exhausted.

varstatement=newSimpleStatement("SELECT * from large_table");//Set the page size, in this case the RowSet will not contain more than 1000 at any timestatement.SetPageSize(1000);varrs=session.Execute(statement);foreach(varrowinrs){//The enumerator will yield all the rows from Cassandra//Retrieving them in the back in blocks of 1000.}

User defined types mapping

You can map your Cassandra User Defined Types to your application entities.

For a given udt

CREATETYPE address (
street text,
city text,
zip_code int,
phones set<text>
);

For a given class

publicclassAddress{publicstringStreet{get;set;}publicstringCity{get;set;}publicintZipCode{get;set;}publicIEnumerable<string>Phones{get;set;}}

You can either map the properties by name

//Map the properties by name automaticallysession.UserDefinedTypes.Define(UdtMap.For<Address>());

Or you can define the properties manually

session.UserDefinedTypes.Define(UdtMap.For<Address>().Map(a =>a.Street,"street").Map(a =>a.City,"city").Map(a =>a.ZipCode,"zip_code").Map(a =>a.Phones,"phones"));

You should map your UDT to your entity once and you will be able to use that mapping during all your application lifetime.

varrs=session.Execute("SELECT id, name, address FROM users where id = x");varrow=rs.First();//You can retrieve the field as a value of type AddressvaruserAddress=row.GetValue<Address>("address");Console.WriteLine("user lives on {0} Street",userAddress.Street);

Setting cluster and statement execution options

You can set the options on how the driver connects to the nodes and the execution options.

//Example at cluster levelvarcluster=Cluster.Builder().AddContactPoints(hosts).WithCompression(CompressionType.LZ4).WithLoadBalancingPolicy(newDCAwareRoundRobinPolicy("west"));//Example at statement (simple, bound, batch) levelvarstatement=newSimpleStatement(query).SetConsistencyLevel(ConsistencyLevel.Quorum).SetRetryPolicy(DowngradingConsistencyRetryPolicy.Instance).SetPageSize(1000);

Feedback Requested

Help us focus our efforts! Provide your input on the Platform and Runtime Survey (we kept it short).

Building and running the tests

You can use Visual Studio or msbuild to build the solution.

Check the documentation for building the driver from source and running the tests.

License

Copyright 2012-2015, DataStax.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

DataStax .NET Driver for Apache Cassandra

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DataStax C# Driver for Apache Cassandra

A modern, feature-rich and highly tunable C# client library for Apache Cassandra (1.2+) and DataStax Enterprise (3.1+) using exclusively Cassandra's binary protocol and Cassandra Query Language v3.

Installation

Get it on Nuget

PM> Install-Package CassandraCSharpDriver

Build statusWindows Build statusLatest stable

Features

  • Sync and Async API
  • Simple, Prepared, and Batch statements
  • Asynchronous IO, parallel execution, request pipelining
  • Connection pooling
  • Auto node discovery
  • Automatic reconnection
  • Configurable load balancing and retry policies
  • Works with any cluster size
  • Linq2Cql and Ado.Net support

Documentation

Getting Help

You can use the project Mailing list or create a ticket on the Jira issue tracker.

Upgrading from previous versions

If you are upgrading from the 2.1 branch of the driver, be sure to have a look at the upgrade guide.

If you are upgrading from the 1.x branch of the driver, follow the upgrade guide to 2.0, and then the above document.

Basic Usage

//Create a cluster instance using 3 cassandra nodes.varcluster=Cluster.Builder().AddContactPoints("host1","host2","host3").Build();//Create connections to the nodes using a keyspacevarsession=cluster.Connect("sample_keyspace");//Execute a query on a connection synchronouslyvarrs=session.Execute("SELECT * FROM sample_table");//Iterate through the RowSetforeach(varrowinrs){varvalue=row.GetValue<int>("sample_int_column");//do something with the value}

Prepared statements

Prepare your query once and bind different parameters to obtain best performance.

//Prepare a statement oncevarps=session.Prepare("UPDATE user_profiles SET birth=? WHERE key=?");//...bind different parameters every time you need to executevarstatement=ps.Bind(newDateTime(1942,11,27),"hendrix");//Execute the bound statement with the provided parameterssession.Execute(statement);

Batching statements

You can execute multiple statements (prepared or unprepared) in a batch to update/insert several rows atomically even in different column families.

//Prepare the statements involved in a profile update oncevarprofileStmt=session.Prepare("UPDATE user_profiles SET email=? WHERE key=?");varuserTrackStmt=session.Prepare("INSERT INTO user_track (key, text, date) VALUES (?, ?, ?)");//...you should reuse the prepared statement//Bind the parameters and add the statement to the batch batchvarbatch=newBatchStatement().Add(profileStmt.Bind(emailAddress,"hendrix")).Add(userTrackStmt.Bind("hendrix","You changed your email",DateTime.Now));//Execute the batchsession.Execute(batch);

Asynchronous API

Session allows asynchronous execution of statements (for any type of statement: simple, bound or batch) by exposing the ExecuteAsync method.

//Execute a statement asynchronously using awaitvarrs=awaitsession.ExecuteAsync(statement);

Avoid boilerplate mapping code

The driver features a built-in Mapper and Linq components that can use to avoid boilerplate mapping code between cql rows and your application entities.

Useruser=mapper.Single<User>("SELECT name, email FROM users WHERE id = ?",userId);

See the driver components documentation for more information.

Automatic pagination of results

You can iterate indefinitely over the RowSet, having the rows fetched block by block until the rows available on the client side are exhausted.

varstatement=newSimpleStatement("SELECT * from large_table");//Set the page size, in this case the RowSet will not contain more than 1000 at any timestatement.SetPageSize(1000);varrs=session.Execute(statement);foreach(varrowinrs){//The enumerator will yield all the rows from Cassandra//Retrieving them in the back in blocks of 1000.}

User defined types mapping

You can map your Cassandra User Defined Types to your application entities.

For a given udt

CREATETYPE address (
street text,
city text,
zip_code int,
phones set<text>
);

For a given class

publicclassAddress{publicstringStreet{get;set;}publicstringCity{get;set;}publicintZipCode{get;set;}publicIEnumerable<string>Phones{get;set;}}

You can either map the properties by name

//Map the properties by name automaticallysession.UserDefinedTypes.Define(UdtMap.For<Address>());

Or you can define the properties manually

session.UserDefinedTypes.Define(UdtMap.For<Address>().Map(a =>a.Street,"street").Map(a =>a.City,"city").Map(a =>a.ZipCode,"zip_code").Map(a =>a.Phones,"phones"));

You should map your UDT to your entity once and you will be able to use that mapping during all your application lifetime.

varrs=session.Execute("SELECT id, name, address FROM users where id = x");varrow=rs.First();//You can retrieve the field as a value of type AddressvaruserAddress=row.GetValue<Address>("address");Console.WriteLine("user lives on {0} Street",userAddress.Street);

Setting cluster and statement execution options

You can set the options on how the driver connects to the nodes and the execution options.

//Example at cluster levelvarcluster=Cluster.Builder().AddContactPoints(hosts).WithCompression(CompressionType.LZ4).WithLoadBalancingPolicy(newDCAwareRoundRobinPolicy("west"));//Example at statement (simple, bound, batch) levelvarstatement=newSimpleStatement(query).SetConsistencyLevel(ConsistencyLevel.Quorum).SetRetryPolicy(DowngradingConsistencyRetryPolicy.Instance).SetPageSize(1000);

Feedback Requested

Help us focus our efforts! Provide your input on the Platform and Runtime Survey (we kept it short).

Building and running the tests

You can use Visual Studio or msbuild to build the solution.

Check the documentation for building the driver from source and running the tests.

License

Copyright 2012-2015, DataStax.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

DataStax .NET Driver for Apache Cassandra

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

DataStax C# Driver for Apache Cassandra

A modern, feature-rich and highly tunable C# client library for Apache Cassandra (1.2+) and DataStax Enterprise (3.1+) using exclusively Cassandra's binary protocol and Cassandra Query Language v3.

Installation

Get it on Nuget

PM> Install-Package CassandraCSharpDriver

Build statusWindows Build statusLatest stable

Features

  • Sync and Async API
  • Simple, Prepared, and Batch statements
  • Asynchronous IO, parallel execution, request pipelining
  • Connection pooling
  • Auto node discovery
  • Automatic reconnection
  • Configurable load balancing and retry policies
  • Works with any cluster size
  • Linq2Cql and Ado.Net support

Documentation

Getting Help

You can use the project Mailing list or create a ticket on the Jira issue tracker.

Upgrading from previous versions

If you are upgrading from the 2.1 branch of the driver, be sure to have a look at the upgrade guide.

If you are upgrading from the 1.x branch of the driver, follow the upgrade guide to 2.0, and then the above document.

Basic Usage

//Create a cluster instance using 3 cassandra nodes.varcluster=Cluster.Builder().AddContactPoints("host1","host2","host3").Build();//Create connections to the nodes using a keyspacevarsession=cluster.Connect("sample_keyspace");//Execute a query on a connection synchronouslyvarrs=session.Execute("SELECT * FROM sample_table");//Iterate through the RowSetforeach(varrowinrs){varvalue=row.GetValue<int>("sample_int_column");//do something with the value}

Prepared statements

Prepare your query once and bind different parameters to obtain best performance.

//Prepare a statement oncevarps=session.Prepare("UPDATE user_profiles SET birth=? WHERE key=?");//...bind different parameters every time you need to executevarstatement=ps.Bind(newDateTime(1942,11,27),"hendrix");//Execute the bound statement with the provided parameterssession.Execute(statement);

Batching statements

You can execute multiple statements (prepared or unprepared) in a batch to update/insert several rows atomically even in different column families.

//Prepare the statements involved in a profile update oncevarprofileStmt=session.Prepare("UPDATE user_profiles SET email=? WHERE key=?");varuserTrackStmt=session.Prepare("INSERT INTO user_track (key, text, date) VALUES (?, ?, ?)");//...you should reuse the prepared statement//Bind the parameters and add the statement to the batch batchvarbatch=newBatchStatement().Add(profileStmt.Bind(emailAddress,"hendrix")).Add(userTrackStmt.Bind("hendrix","You changed your email",DateTime.Now));//Execute the batchsession.Execute(batch);

Asynchronous API

Session allows asynchronous execution of statements (for any type of statement: simple, bound or batch) by exposing the ExecuteAsync method.

//Execute a statement asynchronously using awaitvarrs=awaitsession.ExecuteAsync(statement);

Avoid boilerplate mapping code

The driver features a built-in Mapper and Linq components that can use to avoid boilerplate mapping code between cql rows and your application entities.

Useruser=mapper.Single<User>("SELECT name, email FROM users WHERE id = ?",userId);

See the driver components documentation for more information.

Automatic pagination of results

You can iterate indefinitely over the RowSet, having the rows fetched block by block until the rows available on the client side are exhausted.

varstatement=newSimpleStatement("SELECT * from large_table");//Set the page size, in this case the RowSet will not contain more than 1000 at any timestatement.SetPageSize(1000);varrs=session.Execute(statement);foreach(varrowinrs){//The enumerator will yield all the rows from Cassandra//Retrieving them in the back in blocks of 1000.}

User defined types mapping

You can map your Cassandra User Defined Types to your application entities.

For a given udt

CREATETYPE address (
street text,
city text,
zip_code int,
phones set<text>
);

For a given class

publicclassAddress{publicstringStreet{get;set;}publicstringCity{get;set;}publicintZipCode{get;set;}publicIEnumerable<string>Phones{get;set;}}

You can either map the properties by name

//Map the properties by name automaticallysession.UserDefinedTypes.Define(UdtMap.For<Address>());

Or you can define the properties manually

session.UserDefinedTypes.Define(UdtMap.For<Address>().Map(a =>a.Street,"street").Map(a =>a.City,"city").Map(a =>a.ZipCode,"zip_code").Map(a =>a.Phones,"phones"));

You should map your UDT to your entity once and you will be able to use that mapping during all your application lifetime.

varrs=session.Execute("SELECT id, name, address FROM users where id = x");varrow=rs.First();//You can retrieve the field as a value of type AddressvaruserAddress=row.GetValue<Address>("address");Console.WriteLine("user lives on {0} Street",userAddress.Street);

Setting cluster and statement execution options

You can set the options on how the driver connects to the nodes and the execution options.

//Example at cluster levelvarcluster=Cluster.Builder().AddContactPoints(hosts).WithCompression(CompressionType.LZ4).WithLoadBalancingPolicy(newDCAwareRoundRobinPolicy("west"));//Example at statement (simple, bound, batch) levelvarstatement=newSimpleStatement(query).SetConsistencyLevel(ConsistencyLevel.Quorum).SetRetryPolicy(DowngradingConsistencyRetryPolicy.Instance).SetPageSize(1000);

Feedback Requested

Help us focus our efforts! Provide your input on the Platform and Runtime Survey (we kept it short).

Building and running the tests

You can use Visual Studio or msbuild to build the solution.

Check the documentation for building the driver from source and running the tests.

License

Copyright 2012-2015, DataStax.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

DataStax .NET Driver for Apache Cassandra

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DataStax C# Driver for Apache Cassandra

A modern, feature-rich and highly tunable C# client library for Apache Cassandra (1.2+) and DataStax Enterprise (3.1+) using exclusively Cassandra's binary protocol and Cassandra Query Language v3.

Installation

Get it on Nuget

PM> Install-Package CassandraCSharpDriver

Build statusWindows Build statusLatest stable

Features

  • Sync and Async API
  • Simple, Prepared, and Batch statements
  • Asynchronous IO, parallel execution, request pipelining
  • Connection pooling
  • Auto node discovery
  • Automatic reconnection
  • Configurable load balancing and retry policies
  • Works with any cluster size
  • Linq2Cql and Ado.Net support

Documentation

Getting Help

You can use the project Mailing list or create a ticket on the Jira issue tracker.

Upgrading from previous versions

If you are upgrading from the 2.1 branch of the driver, be sure to have a look at the upgrade guide.

If you are upgrading from the 1.x branch of the driver, follow the upgrade guide to 2.0, and then the above document.

Basic Usage

//Create a cluster instance using 3 cassandra nodes.varcluster=Cluster.Builder().AddContactPoints("host1","host2","host3").Build();//Create connections to the nodes using a keyspacevarsession=cluster.Connect("sample_keyspace");//Execute a query on a connection synchronouslyvarrs=session.Execute("SELECT * FROM sample_table");//Iterate through the RowSetforeach(varrowinrs){varvalue=row.GetValue<int>("sample_int_column");//do something with the value}

Prepared statements

Prepare your query once and bind different parameters to obtain best performance.

//Prepare a statement oncevarps=session.Prepare("UPDATE user_profiles SET birth=? WHERE key=?");//...bind different parameters every time you need to executevarstatement=ps.Bind(newDateTime(1942,11,27),"hendrix");//Execute the bound statement with the provided parameterssession.Execute(statement);

Batching statements

You can execute multiple statements (prepared or unprepared) in a batch to update/insert several rows atomically even in different column families.

//Prepare the statements involved in a profile update oncevarprofileStmt=session.Prepare("UPDATE user_profiles SET email=? WHERE key=?");varuserTrackStmt=session.Prepare("INSERT INTO user_track (key, text, date) VALUES (?, ?, ?)");//...you should reuse the prepared statement//Bind the parameters and add the statement to the batch batchvarbatch=newBatchStatement().Add(profileStmt.Bind(emailAddress,"hendrix")).Add(userTrackStmt.Bind("hendrix","You changed your email",DateTime.Now));//Execute the batchsession.Execute(batch);

Asynchronous API

Session allows asynchronous execution of statements (for any type of statement: simple, bound or batch) by exposing the ExecuteAsync method.

//Execute a statement asynchronously using awaitvarrs=awaitsession.ExecuteAsync(statement);

Avoid boilerplate mapping code

The driver features a built-in Mapper and Linq components that can use to avoid boilerplate mapping code between cql rows and your application entities.

Useruser=mapper.Single<User>("SELECT name, email FROM users WHERE id = ?",userId);

See the driver components documentation for more information.

Automatic pagination of results

You can iterate indefinitely over the RowSet, having the rows fetched block by block until the rows available on the client side are exhausted.

varstatement=newSimpleStatement("SELECT * from large_table");//Set the page size, in this case the RowSet will not contain more than 1000 at any timestatement.SetPageSize(1000);varrs=session.Execute(statement);foreach(varrowinrs){//The enumerator will yield all the rows from Cassandra//Retrieving them in the back in blocks of 1000.}

User defined types mapping

You can map your Cassandra User Defined Types to your application entities.

For a given udt

CREATETYPE address (
street text,
city text,
zip_code int,
phones set<text>
);

For a given class

publicclassAddress{publicstringStreet{get;set;}publicstringCity{get;set;}publicintZipCode{get;set;}publicIEnumerable<string>Phones{get;set;}}

You can either map the properties by name

//Map the properties by name automaticallysession.UserDefinedTypes.Define(UdtMap.For<Address>());

Or you can define the properties manually

session.UserDefinedTypes.Define(UdtMap.For<Address>().Map(a =>a.Street,"street").Map(a =>a.City,"city").Map(a =>a.ZipCode,"zip_code").Map(a =>a.Phones,"phones"));

You should map your UDT to your entity once and you will be able to use that mapping during all your application lifetime.

varrs=session.Execute("SELECT id, name, address FROM users where id = x");varrow=rs.First();//You can retrieve the field as a value of type AddressvaruserAddress=row.GetValue<Address>("address");Console.WriteLine("user lives on {0} Street",userAddress.Street);

Setting cluster and statement execution options

You can set the options on how the driver connects to the nodes and the execution options.

//Example at cluster levelvarcluster=Cluster.Builder().AddContactPoints(hosts).WithCompression(CompressionType.LZ4).WithLoadBalancingPolicy(newDCAwareRoundRobinPolicy("west"));//Example at statement (simple, bound, batch) levelvarstatement=newSimpleStatement(query).SetConsistencyLevel(ConsistencyLevel.Quorum).SetRetryPolicy(DowngradingConsistencyRetryPolicy.Instance).SetPageSize(1000);

Feedback Requested

Help us focus our efforts! Provide your input on the Platform and Runtime Survey (we kept it short).

Building and running the tests

You can use Visual Studio or msbuild to build the solution.

Check the documentation for building the driver from source and running the tests.

License

Copyright 2012-2015, DataStax.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

DataStax .NET Driver for Apache Cassandra

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DataStax C# Driver for Apache Cassandra

A modern, feature-rich and highly tunable C# client library for Apache Cassandra (1.2+) and DataStax Enterprise (3.1+) using exclusively Cassandra's binary protocol and Cassandra Query Language v3.

Installation

Get it on Nuget

PM> Install-Package CassandraCSharpDriver

Build statusWindows Build statusLatest stable

Features

  • Sync and Async API
  • Simple, Prepared, and Batch statements
  • Asynchronous IO, parallel execution, request pipelining
  • Connection pooling
  • Auto node discovery
  • Automatic reconnection
  • Configurable load balancing and retry policies
  • Works with any cluster size
  • Linq2Cql and Ado.Net support

Documentation

Getting Help

You can use the project Mailing list or create a ticket on the Jira issue tracker.

Upgrading from previous versions

If you are upgrading from the 2.1 branch of the driver, be sure to have a look at the upgrade guide.

If you are upgrading from the 1.x branch of the driver, follow the upgrade guide to 2.0, and then the above document.

Basic Usage

//Create a cluster instance using 3 cassandra nodes.varcluster=Cluster.Builder().AddContactPoints("host1","host2","host3").Build();//Create connections to the nodes using a keyspacevarsession=cluster.Connect("sample_keyspace");//Execute a query on a connection synchronouslyvarrs=session.Execute("SELECT * FROM sample_table");//Iterate through the RowSetforeach(varrowinrs){varvalue=row.GetValue<int>("sample_int_column");//do something with the value}

Prepared statements

Prepare your query once and bind different parameters to obtain best performance.

//Prepare a statement oncevarps=session.Prepare("UPDATE user_profiles SET birth=? WHERE key=?");//...bind different parameters every time you need to executevarstatement=ps.Bind(newDateTime(1942,11,27),"hendrix");//Execute the bound statement with the provided parameterssession.Execute(statement);

Batching statements

You can execute multiple statements (prepared or unprepared) in a batch to update/insert several rows atomically even in different column families.

//Prepare the statements involved in a profile update oncevarprofileStmt=session.Prepare("UPDATE user_profiles SET email=? WHERE key=?");varuserTrackStmt=session.Prepare("INSERT INTO user_track (key, text, date) VALUES (?, ?, ?)");//...you should reuse the prepared statement//Bind the parameters and add the statement to the batch batchvarbatch=newBatchStatement().Add(profileStmt.Bind(emailAddress,"hendrix")).Add(userTrackStmt.Bind("hendrix","You changed your email",DateTime.Now));//Execute the batchsession.Execute(batch);

Asynchronous API

Session allows asynchronous execution of statements (for any type of statement: simple, bound or batch) by exposing the ExecuteAsync method.

//Execute a statement asynchronously using awaitvarrs=awaitsession.ExecuteAsync(statement);

Avoid boilerplate mapping code

The driver features a built-in Mapper and Linq components that can use to avoid boilerplate mapping code between cql rows and your application entities.

Useruser=mapper.Single<User>("SELECT name, email FROM users WHERE id = ?",userId);

See the driver components documentation for more information.

Automatic pagination of results

You can iterate indefinitely over the RowSet, having the rows fetched block by block until the rows available on the client side are exhausted.

varstatement=newSimpleStatement("SELECT * from large_table");//Set the page size, in this case the RowSet will not contain more than 1000 at any timestatement.SetPageSize(1000);varrs=session.Execute(statement);foreach(varrowinrs){//The enumerator will yield all the rows from Cassandra//Retrieving them in the back in blocks of 1000.}

User defined types mapping

You can map your Cassandra User Defined Types to your application entities.

For a given udt

CREATETYPE address (
street text,
city text,
zip_code int,
phones set<text>
);

For a given class

publicclassAddress{publicstringStreet{get;set;}publicstringCity{get;set;}publicintZipCode{get;set;}publicIEnumerable<string>Phones{get;set;}}

You can either map the properties by name

//Map the properties by name automaticallysession.UserDefinedTypes.Define(UdtMap.For<Address>());

Or you can define the properties manually

session.UserDefinedTypes.Define(UdtMap.For<Address>().Map(a =>a.Street,"street").Map(a =>a.City,"city").Map(a =>a.ZipCode,"zip_code").Map(a =>a.Phones,"phones"));

You should map your UDT to your entity once and you will be able to use that mapping during all your application lifetime.

varrs=session.Execute("SELECT id, name, address FROM users where id = x");varrow=rs.First();//You can retrieve the field as a value of type AddressvaruserAddress=row.GetValue<Address>("address");Console.WriteLine("user lives on {0} Street",userAddress.Street);

Setting cluster and statement execution options

You can set the options on how the driver connects to the nodes and the execution options.

//Example at cluster levelvarcluster=Cluster.Builder().AddContactPoints(hosts).WithCompression(CompressionType.LZ4).WithLoadBalancingPolicy(newDCAwareRoundRobinPolicy("west"));//Example at statement (simple, bound, batch) levelvarstatement=newSimpleStatement(query).SetConsistencyLevel(ConsistencyLevel.Quorum).SetRetryPolicy(DowngradingConsistencyRetryPolicy.Instance).SetPageSize(1000);

Feedback Requested

Help us focus our efforts! Provide your input on the Platform and Runtime Survey (we kept it short).

Building and running the tests

You can use Visual Studio or msbuild to build the solution.

Check the documentation for building the driver from source and running the tests.

License

Copyright 2012-2015, DataStax.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

DataStax .NET Driver for Apache Cassandra

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

DataStax C# Driver for Apache Cassandra

A modern, feature-rich and highly tunable C# client library for Apache Cassandra (1.2+) and DataStax Enterprise (3.1+) using exclusively Cassandra's binary protocol and Cassandra Query Language v3.

Installation

Get it on Nuget

PM> Install-Package CassandraCSharpDriver

Build statusWindows Build statusLatest stable

Features

  • Sync and Async API
  • Simple, Prepared, and Batch statements
  • Asynchronous IO, parallel execution, request pipelining
  • Connection pooling
  • Auto node discovery
  • Automatic reconnection
  • Configurable load balancing and retry policies
  • Works with any cluster size
  • Linq2Cql and Ado.Net support

Documentation

Getting Help

You can use the project Mailing list or create a ticket on the Jira issue tracker.

Upgrading from previous versions

If you are upgrading from the 2.1 branch of the driver, be sure to have a look at the upgrade guide.

If you are upgrading from the 1.x branch of the driver, follow the upgrade guide to 2.0, and then the above document.

Basic Usage

//Create a cluster instance using 3 cassandra nodes.varcluster=Cluster.Builder().AddContactPoints("host1","host2","host3").Build();//Create connections to the nodes using a keyspacevarsession=cluster.Connect("sample_keyspace");//Execute a query on a connection synchronouslyvarrs=session.Execute("SELECT * FROM sample_table");//Iterate through the RowSetforeach(varrowinrs){varvalue=row.GetValue<int>("sample_int_column");//do something with the value}

Prepared statements

Prepare your query once and bind different parameters to obtain best performance.

//Prepare a statement oncevarps=session.Prepare("UPDATE user_profiles SET birth=? WHERE key=?");//...bind different parameters every time you need to executevarstatement=ps.Bind(newDateTime(1942,11,27),"hendrix");//Execute the bound statement with the provided parameterssession.Execute(statement);

Batching statements

You can execute multiple statements (prepared or unprepared) in a batch to update/insert several rows atomically even in different column families.

//Prepare the statements involved in a profile update oncevarprofileStmt=session.Prepare("UPDATE user_profiles SET email=? WHERE key=?");varuserTrackStmt=session.Prepare("INSERT INTO user_track (key, text, date) VALUES (?, ?, ?)");//...you should reuse the prepared statement//Bind the parameters and add the statement to the batch batchvarbatch=newBatchStatement().Add(profileStmt.Bind(emailAddress,"hendrix")).Add(userTrackStmt.Bind("hendrix","You changed your email",DateTime.Now));//Execute the batchsession.Execute(batch);

Asynchronous API

Session allows asynchronous execution of statements (for any type of statement: simple, bound or batch) by exposing the ExecuteAsync method.

//Execute a statement asynchronously using awaitvarrs=awaitsession.ExecuteAsync(statement);

Avoid boilerplate mapping code

The driver features a built-in Mapper and Linq components that can use to avoid boilerplate mapping code between cql rows and your application entities.

Useruser=mapper.Single<User>("SELECT name, email FROM users WHERE id = ?",userId);

See the driver components documentation for more information.

Automatic pagination of results

You can iterate indefinitely over the RowSet, having the rows fetched block by block until the rows available on the client side are exhausted.

varstatement=newSimpleStatement("SELECT * from large_table");//Set the page size, in this case the RowSet will not contain more than 1000 at any timestatement.SetPageSize(1000);varrs=session.Execute(statement);foreach(varrowinrs){//The enumerator will yield all the rows from Cassandra//Retrieving them in the back in blocks of 1000.}

User defined types mapping

You can map your Cassandra User Defined Types to your application entities.

For a given udt

CREATETYPE address (
street text,
city text,
zip_code int,
phones set<text>
);

For a given class

publicclassAddress{publicstringStreet{get;set;}publicstringCity{get;set;}publicintZipCode{get;set;}publicIEnumerable<string>Phones{get;set;}}

You can either map the properties by name

//Map the properties by name automaticallysession.UserDefinedTypes.Define(UdtMap.For<Address>());

Or you can define the properties manually

session.UserDefinedTypes.Define(UdtMap.For<Address>().Map(a =>a.Street,"street").Map(a =>a.City,"city").Map(a =>a.ZipCode,"zip_code").Map(a =>a.Phones,"phones"));

You should map your UDT to your entity once and you will be able to use that mapping during all your application lifetime.

varrs=session.Execute("SELECT id, name, address FROM users where id = x");varrow=rs.First();//You can retrieve the field as a value of type AddressvaruserAddress=row.GetValue<Address>("address");Console.WriteLine("user lives on {0} Street",userAddress.Street);

Setting cluster and statement execution options

You can set the options on how the driver connects to the nodes and the execution options.

//Example at cluster levelvarcluster=Cluster.Builder().AddContactPoints(hosts).WithCompression(CompressionType.LZ4).WithLoadBalancingPolicy(newDCAwareRoundRobinPolicy("west"));//Example at statement (simple, bound, batch) levelvarstatement=newSimpleStatement(query).SetConsistencyLevel(ConsistencyLevel.Quorum).SetRetryPolicy(DowngradingConsistencyRetryPolicy.Instance).SetPageSize(1000);

Feedback Requested

Help us focus our efforts! Provide your input on the Platform and Runtime Survey (we kept it short).

Building and running the tests

You can use Visual Studio or msbuild to build the solution.

Check the documentation for building the driver from source and running the tests.

License

Copyright 2012-2015, DataStax.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

DataStax .NET Driver for Apache Cassandra

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages