# Database connection string

**Note**: Starcounter 3.0.0 is currently in preview stage. This API might be changed in the future releases without backwards compatibility.

## Connection String options

| Name           | Type     | Required | Default Value       | Description                                                          |
| -------------- | -------- | -------- | ------------------- | -------------------------------------------------------------------- |
| `Database`     | `string` | True     | None                | Absolute or relative database directory path.                        |
| `OpenMode`     | `enum`   | False    | `CreateIfNotExists` | Specifies database creation strategy.                                |
| `StartMode`    | `enum`   | False    | `StartIfNotRunning` | Specifies database startup strategy.                                 |
| `StopMode`     | `enum`   | False    | `IfWeStarted`       | Specifies database shut down strategy.                               |
| `ContextCount` | `int`    | False    | 2 - 24              | Specifies number of database contexts allocated for this connection. |

### The `DatabaseOpenMode` enumeration values

* `Open` - Opens the database if it exist.
* `CreateIfNotExists` - Opens the database if it exist, and creates one if it doesn't.

### The `DatabaseStartMode` enumeration values

* `RequireStarted` - Expects database processes to be running, and won't attempt starting them.
* `StartIfNotRunning` - Connects if database processes are already running, and start them first if they are not.
* `StartExclusive` - Expects no database processes to be running, and start them if they are not. Refuse to connect if database processes are already running.

### The `DatabaseStopMode` enumeration values

* `IfWeStarted` - Stops database processes if they where started by the current application.
* `Never` - Leaves database processes running, even after the application shuts down and even if the application started them.

*Note: the `Never` option is not effective when the application process is forcibly killed with task manager or `Ctrl + C`. In this case operating system will kill corresponding Starcounter processes as well.*

### The `ContextCount` option

Starcounter has maximum of `31` database contexts available for allocation between multiple processes. By default, Starcounter application tries to allocate double as many contexts as CPU cores available, but minimum `2` and maximum `24`.

The ideal configuration is to have a database context per CPU core. Having more database contexts than CPU cores might increase performance in certain concurrent database access workloads. Having less database contexts than CPU cores might decrease performance of concurrent database access during high concurrent load.

Use `ContextCount` option to manually adjust database contexts allocation.

## Connection String sample

```
Database=./.database/Sample;OpenMode=CreateIfNotExists;StartMode=StartIfNotRunning;StopMode=IfWeStarted;ContextCount=10
```
