Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
OrigoDB 
Build faster systems faster
Robert Friberg 
• Design, build and maintain systems for clients at Devrex 
• Trainer – Microsoft NET, SQL Server, java, perl, python, linux 
• Machine learning, AI 
• Squash fanatic 
• @robertfriberg, robert@devrexlabs.com
Why? 
Service 
Layer 
Domain 
Layer 
Data Access 
Layer 
Relational 
Model 
Views/SP’s 
Build faster systems faster
What is OrigoDB? 
• In-memory database toolkit 
• Code and data in same process 
• Write-ahead command logging and snapshots 
• Open Source single DLL for NET/Mono 
• Commercial server with mirror replication

Recommended for you

Benchx: An XQuery benchmarking web application
Benchx: An XQuery benchmarking web application Benchx: An XQuery benchmarking web application
Benchx: An XQuery benchmarking web application

A system to record query performance of XQuery statements running on the BaseX http:basex.org XML database. It uses Angular on the client side and RESTXQ on the server.

basexbenchxangular
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorialsMongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials

The document discusses MongoDB, an open-source document database. It provides an overview of MongoDB, including what it is, why it is used, its basic concepts like databases, collections, and documents, and how it compares to a relational database. It also covers MongoDB commands for creating and dropping collections, inserting, querying, and updating documents.

rdbmsmongodb administrationjavascript
Rapid prototyping using azure functions - A walk on the wild side
Rapid prototyping using azure functions - A walk on the wild sideRapid prototyping using azure functions - A walk on the wild side
Rapid prototyping using azure functions - A walk on the wild side

My presentation at the 2016 Miwaukee .NET conference. Talked about how I leveraged Azure Functions to rapidly prototype a product. http://www.mkedotnet.com/sessions/azure-functions/

azurecloud computingprogramming
How does it work? 
.NET Process Storage 
Handles queries and 
commands, guards 
model 
Engine 
1. AppendToLog 
2. Execute 
command 
PlaceOrderCommand 
Snapshot 
Snapshot 
Client code 
passes commands 
and queries 
PlaceOrderCommand 
NewCustomerCommand 
IncreaseInventoryLevelCommand 
PlaceOrderCommand 
PlaceOrderCommand 
time 
In-memory 
Model
Demand drives change 
• Performance 
• Data volume 
• Scalability 
• Availability 
• Modeling 
• NoSQL 
• Big data 
• Graph 
• Real time analytics 
• In-memory computing 
• Column stores 
One size (RDBMS) no longer fits all 
Polyglot Persistence
B-trees and Transactions 
LOG 
• Fill factor 
• Page splits 
• Clustered index 
• Checkpoint 
DATA 64KB blocks w 8x8KB pages 
Logical BTREE of 8kb data pages 
In the buffer pool (cache) 
Buffer 
Manager 
Transactions append inserted, deleted, original and modified pages to the LOG
When? 
• Whenever data fits in RAM 
• Alternative to general RDBMS OLAP/OLTP 
• Complex models and transactions 
• In-memory analytics 
• Traceability requirements (complete history of events)

Recommended for you

Working with MongoDB as MySQL DBA
Working with MongoDB as MySQL DBAWorking with MongoDB as MySQL DBA
Working with MongoDB as MySQL DBA

Working with MongoDB as MySQL DBA. Comparing commands from MongoDB to MySQL, similarities and differences. Exploring replication features, failover and recovery, adjusting the variables and checking status and using DML, DDL with different storage engines

mysqlmongodbopen source
Lecture 40 1
Lecture 40 1Lecture 40 1
Lecture 40 1

This document provides an introduction to MongoDB, a popular document-oriented database. It discusses how MongoDB stores data in flexible, JSON-like documents rather than rigid tables. It also covers MongoDB's features like replication, sharding, indexing, querying, map-reduce functions and how it provides a scalable and flexible alternative to traditional relational databases. The document also discusses some of the theoretical underpinnings of non-relational databases like MongoDB, including the CAP theorem and ACID versus BASE models of data consistency.

sdasd
YoctoDB в Яндекс.Вертикалях
YoctoDB в Яндекс.ВертикаляхYoctoDB в Яндекс.Вертикалях
YoctoDB в Яндекс.Вертикалях

This document summarizes YoctoDB, an embedded Java library for horizontally partitioned immutable databases developed by Yandex to power its classified search services. It provides very low latency and high throughput for indexing and querying large datasets by using an immutable data model with field-based filtering and sorting. It has improved performance versus Lucene for Yandex's auto search workloads, reducing latency percentiles and CPU usage. YoctoDB's data model and implementation provide benefits like simplified concurrency, fast reindexing, and no need for garbage collection tuning.

Вадим Цеськоsecr2016cee-secr2016
Core framework types
Start your engines! 
var engine = Engine.LoadOrCreate<SalesModel>(); 
// lambda query 
var customer = engine.Execute(db => db.Customers.GetById(42)); 
//Command object 
var cmd = new PlaceOrderCommand(customer.Id, newOrder); 
engine.Execute(cmd); 
engine.Close();
http://geekstream.devrexlabs.com 
• 2 Core, 8GB RAM Cloud VM 
• IIS Web, SPA, ajax, ASP.NET MVC3 
• OrigoDB Server same host, currently 4GB process memory 
• 3k blogs, 500k posts, 500k keywords, 33 million links 
• Journal 1 GB, no snapshots, growth ~ 8MB/day
• Environmental news referral since 1997 
• 100 articles/day, fulltext search, summaries, categories, sources, 
metadata 
• 5000 subscribers, clients, users, billing 
• Email history, weekly newsletters 
• < 4 GB Total RAM

Recommended for you

Putting the Go in MongoDB: How We Rebuilt The MongoDB Tools in Go
Putting the Go in MongoDB: How We Rebuilt The MongoDB Tools in GoPutting the Go in MongoDB: How We Rebuilt The MongoDB Tools in Go
Putting the Go in MongoDB: How We Rebuilt The MongoDB Tools in Go

With the release of MongoDB 3.0, the tools (mongodump, mongoimport, mongotop, etc) have been completely re-designed and re-written in Go to improve maintainability and performance. In this section, we'll give an architectural overview of the tools, describe how we used Go's native capacities to improve their parallelism, and also take a deep technical dive into their internals. We'll discuss performance, usability and integration improvements and share advanced techniques for power users. With a better understanding of how the tools work, you should feel comfortable effectively using and contributing to the tools.

mongodb worldmongodb
MongoDB basics & Introduction
MongoDB basics & IntroductionMongoDB basics & Introduction
MongoDB basics & Introduction

This document provides an overview and introduction to MongoDB including: - MongoDB installation using yum or binary, roles in MongoDB, and how to create users - Basic MongoDB commands like use, show dbs, and dropDatabase - Tracing slow queries using the database profiler and viewing results in the system.profile collection - Important monitoring commands like db.serverStatus(), currentOp(), db.stats(), and replica set commands like rs.status() and rs.printReplicationInfo()

big datamongodbnosql
Using NoSQL MongoDB with ColdFusion
Using NoSQL MongoDB with ColdFusionUsing NoSQL MongoDB with ColdFusion
Using NoSQL MongoDB with ColdFusion

Use of No-SQL databases in web applications is becoming increasingly common. In part this is because they work well with rapid application development due to their schema-less nature. And partly because they scale well in a cloud-based environment without too much effort. MongoDB is one of the many No-SQL database technologies available today. It's schema-less nature works very well with rapid application development nature of ColdFusion. Unlike other No-SQL databases, it offers the ability run arbitrary queries against databases without having to first write map-reduce functions. It also has some other interesting features like capped collections with asynchronous write ability. In this session, Indy takes you through some common use-cases for considering MongoDB with ColdFusion applications, contrasting it with other No-SQL databases like CouchDB. And he shares his experiences of using it with cloud-based ColdFusion applications. The aim of the session is to provide an overview of using MongoDB with ColdFusion so that you have another tool to consider when working on your next web application. This was presented at CFObjective, Melbourne, November 17-18, 2011.

mongodbnosqlcoldfusion
Modeling
Creating a data model 
• Domain specific vs. Generic vs. Hybrid 
• Rich vs. Anemic 
• Explicit vs. Implicit commands 
• References vs. Foreign keys
Computational model types 
• Interpreter hosting – Javascript, Roslyn 
• Lucene index 
• Machine learning models (Accord.NET)
Object oriented domain modeling 
• DDD? 
• Entities and collections 
• Choose collections wisely – space/time tradeoffs 
• Transaction script pattern or thin commands 
• Avoid CRUD

Recommended for you

Microsoft Hekaton
Microsoft HekatonMicrosoft Hekaton
Microsoft Hekaton

Hekaton is SQL Server's in-memory optimized database engine for online transaction processing (OLTP) workloads. It uses lock-free data structures, multi-version concurrency control, and compiled Transact-SQL queries to provide high performance and scalability. Transaction logging and continuous checkpointing ensure data durability. Hekaton tables and indexes are optimized for memory residency, with hash indexes and Bw-tree indexes to support efficient lookups and updates.

datamicrosoftcomputer
CBDW2014 - NoSQL Development With Couchbase and ColdFusion (CFML)
CBDW2014 - NoSQL Development With Couchbase and ColdFusion (CFML)CBDW2014 - NoSQL Development With Couchbase and ColdFusion (CFML)
CBDW2014 - NoSQL Development With Couchbase and ColdFusion (CFML)

NoSQL document stores are reinventing the way we design our databases and cache layers. Couchbase server is a unique offering with unparalleled performance, automatic replication and failover. In this session, we'll talk about how to get started with Couchbase using the open source CFML SDK as well as native caching via the Railo Couchbase Extension.

cbdw2014contentboxrailo
FITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JSFITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JS

Save 10% off ANY FITC event with discount code 'slideshare' See our upcoming events at www.fitc.ca OVERVIEW Are you building mobile or web applications with AngularJS and wish they would work when you were offline? You can read, send and delete mail from your mobile email client when you are offline, why not from your AngularJS app? AngularJS is completely agnostic when it comes to creating your data models. Let’s explore what is required to allow your application to be useful to your users even without an internet connection. INTENDED AUDIENCE - BEGINNER - INTERMEDIATE This presentation is for developers that know they are looking for offline and data synchronization capabilities. Or, possibly for managers that wish to have a greater understanding of what their options are in AngularJS to create such functionality. Daniel Zen, CEO, Zen Digital Daniel Zen is the CEO of Zen Digital, founder of the New York AngularJS Meetup, a frequent lecturer, and a former consultant for Google, Pivotal Labs and various Fortune 500 companies. Zen Digital uses Agile techniques to move projects forward while continuously integrating new code and ideas, producing elegant frontend experiences and efficient backend systems for web and mobile applications.

 
by FITC
mobile webweb developmentweb design and development
Silly Relational 
[Serializable] 
public class RelationalModel : Model 
{ 
private DataSet _dataset; 
public RelationalModel() 
{ 
_dataset = new DataSet(); 
} 
//... ExecuteQuery and ExecuteCommand omitted 
}
Generic Relational 
[Serializable] 
public class RelationalModel : Model 
{ 
Dictionary<string,SortedDictionary<object>> _tables; 
}
Domain specific relational 
[Serializable] 
public class Model : Model 
{ 
SortedDictionary<int,Customer> _customers; 
SortedDictionary<int,Order> _orders; 
SortedDictionary<int,Product> _products; 
SortedDictionary<string,Customer> _customersByName; 
} 
[Serializable] 
public class Order { 
public int CustomerId; //foreign key vs. reference 
}
JS interpreter hosting (V8) 
[Serializable] 
public class JurassicModel : Model 
{ 
private ScriptEngine _scriptEngine; 
public JurassicModel() 
{ 
_scriptEngine = new ScriptEngine(); 
_scriptEngine.Execute("var model = {}"); 
} 
//... ExecuteQuery and ExecuteCommand omitted 
}

Recommended for you

BaseX user-group-talk XML Prague 2013
BaseX user-group-talk XML Prague 2013BaseX user-group-talk XML Prague 2013
BaseX user-group-talk XML Prague 2013

This document discusses using BaseX, an XML database, for web applications. It describes GraphXQ, which uses RESTXQ and Graphviz to visualize graphs. It also describes CellarXQ, an Angular.js single page application that uses BaseX and OAuth for user authentication and data storage. Finally, it shows how to create a chatbot using BaseX, Node.js and Socket.io that passes messages to an XQuery script for processing.

angular.jsnode.jsgraphviz
MongoDB Command Line Tools
MongoDB Command Line ToolsMongoDB Command Line Tools
MongoDB Command Line Tools

The document discusses various MongoDB command line tools and how to use them. It provides examples of using core tools like mongo, mongod, and mongostat to get database information and view performance metrics. Other tools covered include mongodump for backups, mongorestore for restores, mongoexport for data exports, and bsondump for document conversions. Third party tools like automongobackup and mongolog are also mentioned.

mongodb
MongoDB's New Aggregation framework
MongoDB's New Aggregation frameworkMongoDB's New Aggregation framework
MongoDB's New Aggregation framework

The document discusses MongoDB's new aggregation framework, which provides a declarative pipeline for performing data aggregation operations on complex documents. The framework allows users to describe a chain of operations without writing JavaScript. It will offer high-performance operators like $match, $project, $unwind, $group, $sort, and computed expressions to reshape and analyze document data without the overhead of JavaScript. The aggregation framework is nearing release and will support sharding by forwarding pipeline operations to shards and combining results.

aggregationmongodb
Commands 
• Serial execution 
• Exclusive access to the model 
• Transition the model from one valid state to the next 
s0 t s1 s2 1 t2
Command guidelines 
• No side effects or external actions 
• No external dependencies 
• Unhandled exceptions trigger rollback (full restore) 
• Call Command.Abort() to signal exception
The model is an object graph 
TaskList 
Task 
Task 
Task 
TaskList 
Task 
Task 
Task 
Task 
Category 
Category 
Category 
Category 
TaskModel
Query alternatives 
• Ad-hoc lambda: Engine.Execute(Func<M,R> query) 
• Derive from Query<M,R> 
• Compiled LINQ: Engine.Execute<R>(string, args)

Recommended for you

Mongo DB
Mongo DB Mongo DB
Mongo DB

Mongo Db Operations , Installation steps and basic operations .. made out of documentation and from various website and brought this ppt .

mongo dbreplica setbasic crud operations
Mashing the data
Mashing the dataMashing the data
Mashing the data

A proposal for replicating relational databases to non-relational ones. We choose Google Cloud Datastore, but could as well use MongoDB

nosqlbig datagoogle cloud
Silicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your databaseSilicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your database

The best code is the one you never need to write. Using code generation and automated builds you can minimize the risk of human error when developing software, but how do you maintain control over code when large parts of it is handed over to a machine? In this tutorial, you will learn how to use open-source software to create and control code automation. You will see how you can generate a completely object-oriented domain model by automatically analyzing your database schemas. Every aspect of the process is transparent and configurable, giving you as a developer 100% control of the generated code. This will not only increase your productivity, but also help you build safer and more maintainable Java applications.

sv jugprogrammingapplication
Query guidelines 
• Know thy object graphs 
• Don’t modify the model
Demo: HockeySkolan 
• ASP.NET MVC 3 with backing OrigoDB 
• Domain specific model + CmsModel 
• Anemic model => fat commands, model is data
OrigoDB Workshop 
Module 3 - Testing
Automated Test alternatives 
• Transparent testing of domain behavior: entities, model 
• Test commands, queries, entities on model without engine 
• Test with in-memory storage 
• Full stack testing – slow, requires cleanup

Recommended for you

How to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseHow to generate customized java 8 code from your database
How to generate customized java 8 code from your database

Did you know that database classes, that require many lines of Java and SQL code, may be replaced with a single line of Java 8 code? In this tutorial session you will learn how to use standard Java 8 Streams as an alternative to traditional Object Relational Mappers (ORM). We will use the open-source tool Speedment to show how development speed can be increased and how the application code can be more concise and run faster.

programmingdevnexusjava
Running Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on HadoopRunning Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on Hadoop

While working with Hadoop, you'll eventually encounter the need to schedule and run workflows to perform various operations like ingesting data or performing ETL. There are a number of tools available to assist you with this type of requirement and one such tool that we at Clairvoyant have been looking to use is Apache Airflow. Apache Airflow is an Apache Incubator project that allows you to programmatically create workflows through a python script. This provides a flexible and effective way to design your workflows with little code and setup. In this talk, we will discuss Apache Airflow and how we at Clairvoyant have utilized it for ETL pipelines on Hadoop.

daghadoopairflow
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...

The best code is the one you never need to write. Using code generation and automated builds, you can minimize the risk of human error when developing software, but how do you maintain control over code when large parts of it are handed over to a machine? In this tutorial, you will learn how to use open source software to create and control code automation. You will see how you can generate a completely object-oriented domain model by automatically analyzing your database schemas. Every aspect of the process is transparent and configurable, giving you, as a developer, 100 percent control of the generated code. This will not only increase your productivity but also help you build safer, more maintainable Java applications and is a perfect solution for Microservices.

toolkitruntimecodegenerator
In-memory storage 
• Non persistent command journal and snapshots 
• Mimics FileStore using MemoryStreams 
• Tests serialization/identity issues 
var config = EngineConfiguration.Create().ForIsolatedTest(); 
OR: 
config.SetCommandStoreFactory(cfg => new InMemoryCommandStore(cfg)); 
config.SetSnapshotStoreFactory(cfg => new InMemorySnapshotStore(cfg));
Demo: RedisModel 
• Testing model behavior with NUnit
OrigoDB Workshop 
Module 4 – Hosting
Direct in-process engine creation 
• Static Engine methods 
• Create() 
• LoadOrCreate() 
• Load() 
• Returns: Engine, Engine<M> 
Engine<MyModel> engine = Engine.LoadOrCreate<MyModel>();

Recommended for you

How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...

The best code is the one you never need to write. Using code generation and automated builds, you can minimize the risk of human error when developing software, but how do you maintain control over code when large parts of it are handed over to a machine? In this tutorial, you will learn how to use open source software to create and control code automation. You will see how you can generate a completely object-oriented domain model by automatically analyzing your database schemas. Every aspect of the process is transparent and configurable, giving you, as a developer, 100 percent control of the generated code. This will not only increase your productivity but also help you build safer, more maintainable Java applications and is a perfect solution for Microservices.

stream ormjavastream
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator

The document provides an introduction to Typesafe Activator and the Play Framework. It discusses how Activator is a tool that helps developers get started with the Typesafe Reactive Platform and Play applications. It also covers some core features of Play like routing, templates, assets, data access with Slick and JSON, and concurrency with Futures, Actors, and WebSockets.

play activator typesafe
In-memory Databases
In-memory DatabasesIn-memory Databases
In-memory Databases

This is from a 2 hour talk introducing in-memory databases. First a look at traditional RDBMS architecture and some of it's limitations, then a look at some in-memory products and finally a closer look at OrigoDB, the open source in-memory database toolkit for NET/Mono.

in-memory database datomic origodb
Engine.For<M>() 
• Returns IEngine<M>() or derivative 
• Reuse based on EngineConfiguration.Location property 
• Remote or in-process 
• ILocalEngineClient<M> 
• IRemoteEngineClient<M> 
• Running engines are tracked by Config.Engines
Db.For<M>() 
• Returns a proxy for M 
• Remote or Local analogous to Engine.For<M>
x64 vs. x32 
• Core Library compiled with AnyCPU 
• x32 = 32-bit pointers, max 4GB 
• x64 = 64-bit pointers 
• Server ships with x64 and x32 binaries
IIS Hosting 
• Disable application pool recycling 
• Ensure single process, no farming or LB 
• Litter controllers with Db.For<M>() / Engine.For<M>() 
• Or put a static ref somewhere, eg Global.asax

Recommended for you

Architectures, Frameworks and Infrastructure
Architectures, Frameworks and InfrastructureArchitectures, Frameworks and Infrastructure
Architectures, Frameworks and Infrastructure

This document discusses various technologies related to architectures, frameworks, infrastructure, services, data stores, analytics, logging and metrics. It covers Java 8 features like lambda expressions and method references. It also discusses microservices, Spring Boot basics and features, Gradle vs Maven, Swagger, AngularJS, Gulp, Jasmine, Karma, Nginx, CloudFront, Couchbase, Lambda Architecture, logging with Fluentd and Elasticsearch, metrics collection with Collectd and Statsd, and visualization with Graphite and Grafana.

mtl_rubykaigi
mtl_rubykaigimtl_rubykaigi
mtl_rubykaigi

This document summarizes the experiences of operating Rails websites at stable scale. It discusses using virtualization to run multiple websites on a single server. It provides tips for optimizing performance including database tuning, adding indexes, log rotation, and restarting Mongrel processes periodically. New Rails sites are launched using the newest framework versions and different web servers like Passenger are tested for performance.

rubykaigirubykaigi2009
8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development Security

This chapter discusses software development security. It covers topics like programming concepts, compilers and interpreters, procedural vs object-oriented languages, application development methods like waterfall vs agile models, databases, object-oriented design, assessing software vulnerabilities, and artificial intelligence techniques. The key aspects are securing the entire software development lifecycle from initial planning through operation and disposal, using secure coding practices, testing for vulnerabilities, and continually improving processes.

Proxy 
• Proxy has same interface as the Model 
• Method calls are intercepted 
• void methods interpreted as commands (and logged) 
• other methods interpreted as queries 
• Can be overriden with attributes 
• Local or remote, cluster
Demo: Let’s build a key/value store 
• New project 
• Reference origodb.core 
• Define KeyValueStoreModel 
• void Put(key, value) 
• object Get(key,value) 
• bool Exists(key, value) 
• bool Remove(key,value) 
• Add some unit tests
OrigoDB Workshop 
Module 5 – Configuration
EngineConfiguration class – key properties 
• AsyncJournaling 
• EnsureSafeResults 
• Kernel 
• Location 
• PacketOptions 
• PersistenceMode 
• SnapshotBehavior

Recommended for you

Sista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceSista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performance

Title: Sista: Improving Cog’s JIT performance Speaker: Clément Béra Thu, August 21, 9:45am – 10:30am Video Part1 https://www.youtube.com/watch?v=X4E_FoLysJg Video Part2 https://www.youtube.com/watch?v=gZOk3qojoVE Description Abstract: Although recent improvements of the Cog VM performance made it one of the fastest available Smalltalk virtual machine, the overhead compared to optimized C code remains important. Efficient industrial object oriented virtual machine, such as Javascript V8's engine for Google Chrome and Oracle Java Hotspot can reach on many benchs the performance of optimized C code thanks to adaptive optimizations performed their JIT compilers. The VM becomes then cleverer, and after executing numerous times the same portion of codes, it stops the code execution, looks at what it is doing and recompiles critical portion of codes in code faster to run based on the current environment and previous executions. Bio: Clément Béra and Eliot Miranda has been working together on Cog's JIT performance for the last year. Clément Béra is a young engineer and has been working in the Pharo team for the past two years. Eliot Miranda is a Smalltalk VM expert who, among others, has implemented Cog's JIT and the Spur Memory Manager for Cog.

 
by ESUG
esug2014sistacog
CISSP Prep: Ch 9. Software Development Security
CISSP Prep: Ch 9. Software Development SecurityCISSP Prep: Ch 9. Software Development Security
CISSP Prep: Ch 9. Software Development Security

The document discusses various topics related to software development security including programming concepts, compilers and interpreters, procedural vs object-oriented programming, software development lifecycles, agile development methods, database security, and object-oriented design. It also covers assessing software security through vulnerabilities, maturity models, and testing as well as artificial intelligence techniques.

securityhacking
Bye bye $GLOBALS['TYPO3_DB']
Bye bye $GLOBALS['TYPO3_DB']Bye bye $GLOBALS['TYPO3_DB']
Bye bye $GLOBALS['TYPO3_DB']

This document discusses replacing the use of $GLOBALS['TYPO3_DB'] with Doctrine DBAL for database queries in TYPO3 extensions. Doctrine DBAL provides a database abstraction layer that supports multiple database vendors, whereas $GLOBALS['TYPO3_DB'] only supports MySQL. Migrating to Doctrine DBAL offers benefits like a more reliable industry standard and easier API. The document provides examples of common queries like select, insert, update using the Doctrine query builder and highlights best practices for security and restrictions. $GLOBALS['TYPO3_DB'] will be removed in TYPO3 8 LTS, so extensions need to migrate to Doctrine DB

databasedbaldoctrine
EngineConfiguration.Location property 
• File location for FileStorage 
• Connection string when SqlStorage 
• Defaults (when null) 
• Will look in app.config for connection string 
• Type name of model 
• Current working directory 
• App_Data in web context 
• Magic 
• mode=remote;host=10.0.0.20;port=3001
Persistence modes 
• Journaling (default) 
• SnapshotPerTransaction 
• ManualSnapshots 
var config = EngineConfiguration.Create(); 
config.PersistenceMode = PersistenceMode.SnapshotPerTransaction; 
var db = Engine.For<MyModel>(config);
Kernels 
• OptimisticKernel (default) 
• RoyalFoodTaster 
var config = EngineConfiguration.Create(); 
config.Kernel = Kernels.RoyalFoodTaster; 
var db = Db.For<MyModel>(config);
Logging 
• Logging disabled by default 
//enable logging 
ConsoleLogger.MinimumLevel = LogLevel.Trace; 
//Plugin custom logger 
LogProvider.SetFactory(new Log4NetLoggerFactory());

Recommended for you

8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development Security

The document discusses various topics related to software development security including programming concepts, compilers and interpreters, procedural vs object-oriented programming, application development methods like waterfall vs agile, database security concepts, and assessing software vulnerabilities. It provides an overview of machine code, source code, and assembly language. It also describes compilers and interpreters, top-down vs bottom-up programming, open source vs proprietary software, and the software development lifecycle (SDLC) process.

cisspmanagementsecurity
Adding Support for Networking and Web Technologies to an Embedded System
Adding Support for Networking and Web Technologies to an Embedded SystemAdding Support for Networking and Web Technologies to an Embedded System
Adding Support for Networking and Web Technologies to an Embedded System

These are the slides for a presentation we gave at Device Developer Conference 2014 in the UK. The presentation discusses the work done, experiences, and lessons learnt from adding an open source TCP/IP network stack and web server to an existing industrial control system running on an ARM Cortex M3-based processor from TI. The presentation covers the following: · Integrating the network stack into the existing software base · Configuring and using the network stack and web server · Adding support for HTTP basic authentication to restrict user access · Using HTTP to remotely access the target system and retrieve operational data · Debugging hints and tips · Pitfalls to avoid and other lessons learnt

httpembedded developmenttcp/ip
Predicting Flights with Azure Databricks
Predicting Flights with Azure DatabricksPredicting Flights with Azure Databricks
Predicting Flights with Azure Databricks

This document summarizes a presentation on using Azure Databricks to predict flight delays. It introduces Databricks, which has environments for SQL, data science/engineering, and machine learning. For the flight prediction scenario, historical flight data is loaded into Databricks and a decision tree model is trained to predict delays. The model is then used to score new flight data and results are analyzed in Power BI.

azure databricksmicrosoft cloud workshopdatabricks
Extensibility 
• EngineConfiguration methods 
• SetAuthorizerFactory() 
• SetSynchronizerFactory() 
• SetCommandStoreFactory() 
• SetFormatterFactory()
ProtobufFormatter 
• Protocol Buffers by Google 
• IFormatter wrapper around protobuf-net by @marcgravell 
• Contract based as opposed to embedded metadata 
• Compact, fast, loose coupling, cross platform 
• Configure with attributes or code 
• Use it!
Protobuf: Attribute based configuration 
[ProtoContract] 
public class Company 
{ 
[ProtoMember(1)] 
public string Name { get; set; } 
[ProtoMember(2)] 
public List<Employee> Employees { get; set; } 
}
Protobuf: Code-based configuration 
var typeModel = TypeModel.Create(); 
typeModel.Add(typeof (Company), false) 
.Add(1, ”Name") 
.Add(2, ”Employees");

Recommended for you

Asp.net MVC training session
Asp.net MVC training sessionAsp.net MVC training session
Asp.net MVC training session

During 4 days, I presented a training session for the .Net team in Business & Decision Tunisia about Asp.net MVC. In this training we talked about: MVC as a design pattern the history and the utility Microsoft’s approach in Asp.net MVC What's new in MVC 4 Data Access in Asp.net MVC How to secure an Asp.net application Dependency Injection in Asp.net MVC

asp.net mvcsignalrentity framework
Asp.Net MVC
Asp.Net MVCAsp.Net MVC
Asp.Net MVC

The document discusses the Model-View-Controller (MVC) design pattern, which separates an application's data (model), user interface (view), and logic that manipulates data and controls the application flow and behavior (controller). MVC promotes loose coupling, separation of concerns, testability, and reusable code. The key components - model, view, and controller - and their roles are defined. ASP.NET MVC framework is introduced as an alternative to Web Forms that follows the MVC pattern.

asp.netmvc
ZZ BC#7 asp.net mvc practice and guideline by NineMvp
ZZ BC#7 asp.net mvc practice and guideline by NineMvpZZ BC#7 asp.net mvc practice and guideline by NineMvp
ZZ BC#7 asp.net mvc practice and guideline by NineMvp

This document provides an overview and agenda for an ASP.NET MVC practice and guidelines session. The agenda includes discussing MVC programming fundamentals like models, views, controllers and routes. It also covers NuGet, Entity Framework Code First, common UI libraries, the repository pattern, application layer architecture and dependency injection principles. The session includes demonstrations of these various ASP.NET MVC and software design topics.

Inject formatter factory 
//use helper methods 
ProtoBufFormatter.ConfigureSnapshots<MyModel>(config, typeModel); 
ProtoBufFormatter.Configure(config, FormatterUsage.Results, typeModel); 
//or do it yourself 
config.SetFormatterFactory((cfg,fu) 
=> new ProtoBufFormatter<MyModel>(typeModel), 
FormatterUsage.Snapshot);
OrigoDB Workshop 
Module 6 – Immutability
Immutability and blocking writer 
reader
States share immutable objects 
s0 
s2 
s s3 1 
(Animated slide)

Recommended for you

DjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling DisqusDjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling Disqus

DISQUS is a comment system that handles high volumes of traffic, with up to 17,000 requests per second and 250 million monthly visitors. They face challenges in unpredictable spikes in traffic and ensuring high availability. Their architecture includes over 100 servers split between web servers, databases, caching, and load balancing. They employ techniques like vertical and horizontal data partitioning, atomic updates, delayed signals, consistent caching, and feature flags to scale their large Django application.

 
by zeeg
disqusdjangoperformance
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...

Presentation to Wing wing community. Porting "Blue Zone" application featured in the "Hexagonal Architecture Explained" book.

cloudinfrastructure from codewinglang
NYC 26-Jun-2024 Combined Presentations.pdf
NYC 26-Jun-2024 Combined Presentations.pdfNYC 26-Jun-2024 Combined Presentations.pdf
NYC 26-Jun-2024 Combined Presentations.pdf

Explore the craft of program and project management, hearing from Atlassian Program Managers, local thought leaders, and more.

project managementpmoatlassian community
Example 
immutable 
model
Example 
immutable 
entity
Immutable command example
Configuration

Recommended for you

dachnug51 - HCL Domino Roadmap .pdf
dachnug51 - HCL Domino Roadmap      .pdfdachnug51 - HCL Domino Roadmap      .pdf
dachnug51 - HCL Domino Roadmap .pdf

dachnug51 | HCL Domino Roadmap | Thomas Hampel & Tim Clark

dnugdachnug51hcl software
@Call @Girls in Solapur 🤷‍♂️ XXXXXXXX 🤷‍♂️ Tanisha Sharma Best High Class S...
 @Call @Girls in Solapur 🤷‍♂️  XXXXXXXX 🤷‍♂️ Tanisha Sharma Best High Class S... @Call @Girls in Solapur 🤷‍♂️  XXXXXXXX 🤷‍♂️ Tanisha Sharma Best High Class S...
@Call @Girls in Solapur 🤷‍♂️ XXXXXXXX 🤷‍♂️ Tanisha Sharma Best High Class S...

For Ad Post Contact :- adityaroy0215@gmail.com

Alluxio Webinar | 10x Faster Trino Queries on Your Data Platform
Alluxio Webinar | 10x Faster Trino Queries on Your Data PlatformAlluxio Webinar | 10x Faster Trino Queries on Your Data Platform
Alluxio Webinar | 10x Faster Trino Queries on Your Data Platform

Alluxio Webinar June. 18, 2024 For more Alluxio Events: https://www.alluxio.io/events/ Speaker: - Jianjian Xie (Staff Software Engineer, Alluxio) As Trino users increasingly rely on cloud object storage for retrieving data, speed and cloud cost have become major challenges. The separation of compute and storage creates latency challenges when querying datasets; scanning data between storage and compute tiers becomes I/O bound. On the other hand, cloud API costs related to GET/LIST operations and cross-region data transfer add up quickly. The newly introduced Trino file system cache by Alluxio aims to overcome the above challenges. In this session, Jianjian will dive into Trino data caching strategies, the latest test results, and discuss the multi-level caching architecture. This architecture makes Trino 10x faster for data lakes of any scale, from GB to EB. What you will learn: - Challenges relating to the speed and costs of running Trino in the cloud - The new Trino file system cache feature overview, including the latest development status and test results - A multi-level cache framework for maximized speed, including Trino file system cache and Alluxio distributed cache - Real-world cases, including a large online payment firm and a top ridesharing company - The future roadmap of Trino file system cache and Trino-Alluxio integration

softwareopen sourcecaching
OrigoDB Workshop 
Module 6 – Server
OrigoDB Server 
• Console Application or Windows Service 
• Process hosting single Engine / Model 
• Ad-hoc Linq / Razor queries 
• Javascript API 
• Primitive web based UI 
• Commercial License 
• Multiserver replication
Transparent client migration 
• Configuration strings: 
• mode=embedded 
• mode=remote;host=10.10.10.10;port=3001
Lab M6 
• Follow the OrigoDB Server online tutorial 
http://origodb.com/

Recommended for you

Break data silos with real-time connectivity using Confluent Cloud Connectors
Break data silos with real-time connectivity using Confluent Cloud ConnectorsBreak data silos with real-time connectivity using Confluent Cloud Connectors
Break data silos with real-time connectivity using Confluent Cloud Connectors

Connectors integrate Apache Kafka® with external data systems, enabling you to move away from a brittle spaghetti architecture to one that is more streamlined, secure, and future-proof. However, if your team still spends multiple dev cycles building and managing connectors using just open source Kafka Connect, it’s time to consider a faster and cost-effective alternative.

Top 10 Tips To Get Google AdSense For Your Website
Top 10 Tips To Get Google AdSense For Your WebsiteTop 10 Tips To Get Google AdSense For Your Website
Top 10 Tips To Get Google AdSense For Your Website

Lots of bloggers are using Google AdSense now. It’s getting really popular. With AdSense, bloggers can make money by showing ads on their websites. Read this important article written by the experienced designers of the best website designing company in Delhi –

website designing company in d
ENISA Threat Landscape 2023 documentation
ENISA Threat Landscape 2023 documentationENISA Threat Landscape 2023 documentation
ENISA Threat Landscape 2023 documentation

ENISA Threat Landscape 2023

Thank you for listening! 
• http://origodb.com 
• http://dev.origodb.com 
• http://github.com/devrexlabs 
• http://geekstream.devrexlabs.com 
• @robertfriberg, @devrexlabs

More Related Content

What's hot

Lokijs
LokijsLokijs
NoSQL and JavaScript: a Love Story
NoSQL and JavaScript: a Love StoryNoSQL and JavaScript: a Love Story
NoSQL and JavaScript: a Love Story
Alexandre Morgaut
 
Evolution of MonogDB Sharding and Its Best Practices - Ranjith A - Mydbops Team
Evolution of MonogDB Sharding and Its Best Practices - Ranjith A - Mydbops TeamEvolution of MonogDB Sharding and Its Best Practices - Ranjith A - Mydbops Team
Evolution of MonogDB Sharding and Its Best Practices - Ranjith A - Mydbops Team
Mydbops
 
Benchx: An XQuery benchmarking web application
Benchx: An XQuery benchmarking web application Benchx: An XQuery benchmarking web application
Benchx: An XQuery benchmarking web application
Andy Bunce
 
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorialsMongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
SpringPeople
 
Rapid prototyping using azure functions - A walk on the wild side
Rapid prototyping using azure functions - A walk on the wild sideRapid prototyping using azure functions - A walk on the wild side
Rapid prototyping using azure functions - A walk on the wild side
Samrat Saha
 
Working with MongoDB as MySQL DBA
Working with MongoDB as MySQL DBAWorking with MongoDB as MySQL DBA
Working with MongoDB as MySQL DBA
Igor Donchovski
 
Lecture 40 1
Lecture 40 1Lecture 40 1
Lecture 40 1
patib5
 
YoctoDB в Яндекс.Вертикалях
YoctoDB в Яндекс.ВертикаляхYoctoDB в Яндекс.Вертикалях
YoctoDB в Яндекс.Вертикалях
CEE-SEC(R)
 
Putting the Go in MongoDB: How We Rebuilt The MongoDB Tools in Go
Putting the Go in MongoDB: How We Rebuilt The MongoDB Tools in GoPutting the Go in MongoDB: How We Rebuilt The MongoDB Tools in Go
Putting the Go in MongoDB: How We Rebuilt The MongoDB Tools in Go
MongoDB
 
MongoDB basics & Introduction
MongoDB basics & IntroductionMongoDB basics & Introduction
MongoDB basics & Introduction
Jerwin Roy
 
Using NoSQL MongoDB with ColdFusion
Using NoSQL MongoDB with ColdFusionUsing NoSQL MongoDB with ColdFusion
Using NoSQL MongoDB with ColdFusion
indiver
 
Microsoft Hekaton
Microsoft HekatonMicrosoft Hekaton
Microsoft Hekaton
Siraj Memon
 
CBDW2014 - NoSQL Development With Couchbase and ColdFusion (CFML)
CBDW2014 - NoSQL Development With Couchbase and ColdFusion (CFML)CBDW2014 - NoSQL Development With Couchbase and ColdFusion (CFML)
CBDW2014 - NoSQL Development With Couchbase and ColdFusion (CFML)
Ortus Solutions, Corp
 
FITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JSFITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JS
FITC
 
BaseX user-group-talk XML Prague 2013
BaseX user-group-talk XML Prague 2013BaseX user-group-talk XML Prague 2013
BaseX user-group-talk XML Prague 2013
Andy Bunce
 
MongoDB Command Line Tools
MongoDB Command Line ToolsMongoDB Command Line Tools
MongoDB Command Line Tools
Rainforest QA
 
MongoDB's New Aggregation framework
MongoDB's New Aggregation frameworkMongoDB's New Aggregation framework
MongoDB's New Aggregation framework
Chris Westin
 
Mongo DB
Mongo DB Mongo DB
Mashing the data
Mashing the dataMashing the data
Mashing the data
Felix Crisan
 

What's hot (20)

Lokijs
LokijsLokijs
Lokijs
 
NoSQL and JavaScript: a Love Story
NoSQL and JavaScript: a Love StoryNoSQL and JavaScript: a Love Story
NoSQL and JavaScript: a Love Story
 
Evolution of MonogDB Sharding and Its Best Practices - Ranjith A - Mydbops Team
Evolution of MonogDB Sharding and Its Best Practices - Ranjith A - Mydbops TeamEvolution of MonogDB Sharding and Its Best Practices - Ranjith A - Mydbops Team
Evolution of MonogDB Sharding and Its Best Practices - Ranjith A - Mydbops Team
 
Benchx: An XQuery benchmarking web application
Benchx: An XQuery benchmarking web application Benchx: An XQuery benchmarking web application
Benchx: An XQuery benchmarking web application
 
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorialsMongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
 
Rapid prototyping using azure functions - A walk on the wild side
Rapid prototyping using azure functions - A walk on the wild sideRapid prototyping using azure functions - A walk on the wild side
Rapid prototyping using azure functions - A walk on the wild side
 
Working with MongoDB as MySQL DBA
Working with MongoDB as MySQL DBAWorking with MongoDB as MySQL DBA
Working with MongoDB as MySQL DBA
 
Lecture 40 1
Lecture 40 1Lecture 40 1
Lecture 40 1
 
YoctoDB в Яндекс.Вертикалях
YoctoDB в Яндекс.ВертикаляхYoctoDB в Яндекс.Вертикалях
YoctoDB в Яндекс.Вертикалях
 
Putting the Go in MongoDB: How We Rebuilt The MongoDB Tools in Go
Putting the Go in MongoDB: How We Rebuilt The MongoDB Tools in GoPutting the Go in MongoDB: How We Rebuilt The MongoDB Tools in Go
Putting the Go in MongoDB: How We Rebuilt The MongoDB Tools in Go
 
MongoDB basics & Introduction
MongoDB basics & IntroductionMongoDB basics & Introduction
MongoDB basics & Introduction
 
Using NoSQL MongoDB with ColdFusion
Using NoSQL MongoDB with ColdFusionUsing NoSQL MongoDB with ColdFusion
Using NoSQL MongoDB with ColdFusion
 
Microsoft Hekaton
Microsoft HekatonMicrosoft Hekaton
Microsoft Hekaton
 
CBDW2014 - NoSQL Development With Couchbase and ColdFusion (CFML)
CBDW2014 - NoSQL Development With Couchbase and ColdFusion (CFML)CBDW2014 - NoSQL Development With Couchbase and ColdFusion (CFML)
CBDW2014 - NoSQL Development With Couchbase and ColdFusion (CFML)
 
FITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JSFITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JS
 
BaseX user-group-talk XML Prague 2013
BaseX user-group-talk XML Prague 2013BaseX user-group-talk XML Prague 2013
BaseX user-group-talk XML Prague 2013
 
MongoDB Command Line Tools
MongoDB Command Line ToolsMongoDB Command Line Tools
MongoDB Command Line Tools
 
MongoDB's New Aggregation framework
MongoDB's New Aggregation frameworkMongoDB's New Aggregation framework
MongoDB's New Aggregation framework
 
Mongo DB
Mongo DB Mongo DB
Mongo DB
 
Mashing the data
Mashing the dataMashing the data
Mashing the data
 

Similar to OrigoDB - take the red pill

Silicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your databaseSilicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your database
Speedment, Inc.
 
How to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseHow to generate customized java 8 code from your database
How to generate customized java 8 code from your database
Speedment, Inc.
 
Running Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on HadoopRunning Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on Hadoop
clairvoyantllc
 
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
Speedment, Inc.
 
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
Malin Weiss
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator
Kevin Webber
 
In-memory Databases
In-memory DatabasesIn-memory Databases
In-memory Databases
Robert Friberg
 
Architectures, Frameworks and Infrastructure
Architectures, Frameworks and InfrastructureArchitectures, Frameworks and Infrastructure
Architectures, Frameworks and Infrastructure
harendra_pathak
 
mtl_rubykaigi
mtl_rubykaigimtl_rubykaigi
mtl_rubykaigi
Hirotomo Oi
 
8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development Security
Sam Bowne
 
Sista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceSista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performance
ESUG
 
CISSP Prep: Ch 9. Software Development Security
CISSP Prep: Ch 9. Software Development SecurityCISSP Prep: Ch 9. Software Development Security
CISSP Prep: Ch 9. Software Development Security
Sam Bowne
 
Bye bye $GLOBALS['TYPO3_DB']
Bye bye $GLOBALS['TYPO3_DB']Bye bye $GLOBALS['TYPO3_DB']
Bye bye $GLOBALS['TYPO3_DB']
Jan Helke
 
8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development Security
Sam Bowne
 
Adding Support for Networking and Web Technologies to an Embedded System
Adding Support for Networking and Web Technologies to an Embedded SystemAdding Support for Networking and Web Technologies to an Embedded System
Adding Support for Networking and Web Technologies to an Embedded System
John Efstathiades
 
Predicting Flights with Azure Databricks
Predicting Flights with Azure DatabricksPredicting Flights with Azure Databricks
Predicting Flights with Azure Databricks
Sarah Dutkiewicz
 
Asp.net MVC training session
Asp.net MVC training sessionAsp.net MVC training session
Asp.net MVC training session
Hrichi Mohamed
 
Asp.Net MVC
Asp.Net MVCAsp.Net MVC
Asp.Net MVC
Sudheesh Valathil
 
ZZ BC#7 asp.net mvc practice and guideline by NineMvp
ZZ BC#7 asp.net mvc practice and guideline by NineMvpZZ BC#7 asp.net mvc practice and guideline by NineMvp
ZZ BC#7 asp.net mvc practice and guideline by NineMvp
Chalermpon Areepong
 
DjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling DisqusDjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling Disqus
zeeg
 

Similar to OrigoDB - take the red pill (20)

Silicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your databaseSilicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your database
 
How to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseHow to generate customized java 8 code from your database
How to generate customized java 8 code from your database
 
Running Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on HadoopRunning Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on Hadoop
 
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
 
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator
 
In-memory Databases
In-memory DatabasesIn-memory Databases
In-memory Databases
 
Architectures, Frameworks and Infrastructure
Architectures, Frameworks and InfrastructureArchitectures, Frameworks and Infrastructure
Architectures, Frameworks and Infrastructure
 
mtl_rubykaigi
mtl_rubykaigimtl_rubykaigi
mtl_rubykaigi
 
8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development Security
 
Sista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceSista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performance
 
CISSP Prep: Ch 9. Software Development Security
CISSP Prep: Ch 9. Software Development SecurityCISSP Prep: Ch 9. Software Development Security
CISSP Prep: Ch 9. Software Development Security
 
Bye bye $GLOBALS['TYPO3_DB']
Bye bye $GLOBALS['TYPO3_DB']Bye bye $GLOBALS['TYPO3_DB']
Bye bye $GLOBALS['TYPO3_DB']
 
8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development Security
 
Adding Support for Networking and Web Technologies to an Embedded System
Adding Support for Networking and Web Technologies to an Embedded SystemAdding Support for Networking and Web Technologies to an Embedded System
Adding Support for Networking and Web Technologies to an Embedded System
 
Predicting Flights with Azure Databricks
Predicting Flights with Azure DatabricksPredicting Flights with Azure Databricks
Predicting Flights with Azure Databricks
 
Asp.net MVC training session
Asp.net MVC training sessionAsp.net MVC training session
Asp.net MVC training session
 
Asp.Net MVC
Asp.Net MVCAsp.Net MVC
Asp.Net MVC
 
ZZ BC#7 asp.net mvc practice and guideline by NineMvp
ZZ BC#7 asp.net mvc practice and guideline by NineMvpZZ BC#7 asp.net mvc practice and guideline by NineMvp
ZZ BC#7 asp.net mvc practice and guideline by NineMvp
 
DjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling DisqusDjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling Disqus
 

Recently uploaded

Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Asher Sterkin
 
NYC 26-Jun-2024 Combined Presentations.pdf
NYC 26-Jun-2024 Combined Presentations.pdfNYC 26-Jun-2024 Combined Presentations.pdf
NYC 26-Jun-2024 Combined Presentations.pdf
AUGNYC
 
dachnug51 - HCL Domino Roadmap .pdf
dachnug51 - HCL Domino Roadmap      .pdfdachnug51 - HCL Domino Roadmap      .pdf
dachnug51 - HCL Domino Roadmap .pdf
DNUG e.V.
 
@Call @Girls in Solapur 🤷‍♂️ XXXXXXXX 🤷‍♂️ Tanisha Sharma Best High Class S...
 @Call @Girls in Solapur 🤷‍♂️  XXXXXXXX 🤷‍♂️ Tanisha Sharma Best High Class S... @Call @Girls in Solapur 🤷‍♂️  XXXXXXXX 🤷‍♂️ Tanisha Sharma Best High Class S...
@Call @Girls in Solapur 🤷‍♂️ XXXXXXXX 🤷‍♂️ Tanisha Sharma Best High Class S...
Mona Rathore
 
Alluxio Webinar | 10x Faster Trino Queries on Your Data Platform
Alluxio Webinar | 10x Faster Trino Queries on Your Data PlatformAlluxio Webinar | 10x Faster Trino Queries on Your Data Platform
Alluxio Webinar | 10x Faster Trino Queries on Your Data Platform
Alluxio, Inc.
 
Break data silos with real-time connectivity using Confluent Cloud Connectors
Break data silos with real-time connectivity using Confluent Cloud ConnectorsBreak data silos with real-time connectivity using Confluent Cloud Connectors
Break data silos with real-time connectivity using Confluent Cloud Connectors
confluent
 
Top 10 Tips To Get Google AdSense For Your Website
Top 10 Tips To Get Google AdSense For Your WebsiteTop 10 Tips To Get Google AdSense For Your Website
Top 10 Tips To Get Google AdSense For Your Website
e-Definers Technology
 
ENISA Threat Landscape 2023 documentation
ENISA Threat Landscape 2023 documentationENISA Threat Landscape 2023 documentation
ENISA Threat Landscape 2023 documentation
sofiafernandezon
 
Kolkata @Call @Girls 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
Kolkata @Call @Girls 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real MeetKolkata @Call @Girls 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
Kolkata @Call @Girls 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
lovelykumarilk789
 
ANSYS Mechanical APDL Introductory Tutorials.pdf
ANSYS Mechanical APDL Introductory Tutorials.pdfANSYS Mechanical APDL Introductory Tutorials.pdf
ANSYS Mechanical APDL Introductory Tutorials.pdf
sachin chaurasia
 
WhatsApp Tracker - Tracking WhatsApp to Boost Online Safety.pdf
WhatsApp Tracker -  Tracking WhatsApp to Boost Online Safety.pdfWhatsApp Tracker -  Tracking WhatsApp to Boost Online Safety.pdf
WhatsApp Tracker - Tracking WhatsApp to Boost Online Safety.pdf
onemonitarsoftware
 
Development of Chatbot Using AI\ML Technologies
Development of Chatbot Using AI\ML TechnologiesDevelopment of Chatbot Using AI\ML Technologies
Development of Chatbot Using AI\ML Technologies
MaisnamLuwangPibarel
 
Folding Cheat Sheet #7 - seventh in a series
Folding Cheat Sheet #7 - seventh in a seriesFolding Cheat Sheet #7 - seventh in a series
Folding Cheat Sheet #7 - seventh in a series
Philip Schwarz
 
@Call @Girls in Surat 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Surat Avaulable
 @Call @Girls in Surat 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Surat Avaulable @Call @Girls in Surat 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Surat Avaulable
@Call @Girls in Surat 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Surat Avaulable
DiyaSharma6551
 
@Call @Girls in Saharanpur 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Clas...
 @Call @Girls in Saharanpur 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Clas... @Call @Girls in Saharanpur 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Clas...
@Call @Girls in Saharanpur 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Clas...
AlinaDevecerski
 
Kolkata @ℂall @Girls ꧁❤ 000000000 ❤꧂@ℂall @Girls Service Vip Top Model Safe
Kolkata @ℂall @Girls ꧁❤ 000000000 ❤꧂@ℂall @Girls Service Vip Top Model SafeKolkata @ℂall @Girls ꧁❤ 000000000 ❤꧂@ℂall @Girls Service Vip Top Model Safe
Kolkata @ℂall @Girls ꧁❤ 000000000 ❤꧂@ℂall @Girls Service Vip Top Model Safe
Misti Soneji
 
Chennai @Call @Girls 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
Chennai @Call @Girls 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real MeetChennai @Call @Girls 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
Chennai @Call @Girls 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
lovelykumarilk789
 
Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps
Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple StepsSeamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps
Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps
Estuary Flow
 
Java SE 17 Study Guide for Certification - Chapter 01
Java SE 17 Study Guide for Certification - Chapter 01Java SE 17 Study Guide for Certification - Chapter 01
Java SE 17 Study Guide for Certification - Chapter 01
williamrobertherman
 
dachnug51 - HCLs evolution of the employee experience platform.pdf
dachnug51 - HCLs evolution of the employee experience platform.pdfdachnug51 - HCLs evolution of the employee experience platform.pdf
dachnug51 - HCLs evolution of the employee experience platform.pdf
DNUG e.V.
 

Recently uploaded (20)

Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
 
NYC 26-Jun-2024 Combined Presentations.pdf
NYC 26-Jun-2024 Combined Presentations.pdfNYC 26-Jun-2024 Combined Presentations.pdf
NYC 26-Jun-2024 Combined Presentations.pdf
 
dachnug51 - HCL Domino Roadmap .pdf
dachnug51 - HCL Domino Roadmap      .pdfdachnug51 - HCL Domino Roadmap      .pdf
dachnug51 - HCL Domino Roadmap .pdf
 
@Call @Girls in Solapur 🤷‍♂️ XXXXXXXX 🤷‍♂️ Tanisha Sharma Best High Class S...
 @Call @Girls in Solapur 🤷‍♂️  XXXXXXXX 🤷‍♂️ Tanisha Sharma Best High Class S... @Call @Girls in Solapur 🤷‍♂️  XXXXXXXX 🤷‍♂️ Tanisha Sharma Best High Class S...
@Call @Girls in Solapur 🤷‍♂️ XXXXXXXX 🤷‍♂️ Tanisha Sharma Best High Class S...
 
Alluxio Webinar | 10x Faster Trino Queries on Your Data Platform
Alluxio Webinar | 10x Faster Trino Queries on Your Data PlatformAlluxio Webinar | 10x Faster Trino Queries on Your Data Platform
Alluxio Webinar | 10x Faster Trino Queries on Your Data Platform
 
Break data silos with real-time connectivity using Confluent Cloud Connectors
Break data silos with real-time connectivity using Confluent Cloud ConnectorsBreak data silos with real-time connectivity using Confluent Cloud Connectors
Break data silos with real-time connectivity using Confluent Cloud Connectors
 
Top 10 Tips To Get Google AdSense For Your Website
Top 10 Tips To Get Google AdSense For Your WebsiteTop 10 Tips To Get Google AdSense For Your Website
Top 10 Tips To Get Google AdSense For Your Website
 
ENISA Threat Landscape 2023 documentation
ENISA Threat Landscape 2023 documentationENISA Threat Landscape 2023 documentation
ENISA Threat Landscape 2023 documentation
 
Kolkata @Call @Girls 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
Kolkata @Call @Girls 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real MeetKolkata @Call @Girls 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
Kolkata @Call @Girls 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
 
ANSYS Mechanical APDL Introductory Tutorials.pdf
ANSYS Mechanical APDL Introductory Tutorials.pdfANSYS Mechanical APDL Introductory Tutorials.pdf
ANSYS Mechanical APDL Introductory Tutorials.pdf
 
WhatsApp Tracker - Tracking WhatsApp to Boost Online Safety.pdf
WhatsApp Tracker -  Tracking WhatsApp to Boost Online Safety.pdfWhatsApp Tracker -  Tracking WhatsApp to Boost Online Safety.pdf
WhatsApp Tracker - Tracking WhatsApp to Boost Online Safety.pdf
 
Development of Chatbot Using AI\ML Technologies
Development of Chatbot Using AI\ML TechnologiesDevelopment of Chatbot Using AI\ML Technologies
Development of Chatbot Using AI\ML Technologies
 
Folding Cheat Sheet #7 - seventh in a series
Folding Cheat Sheet #7 - seventh in a seriesFolding Cheat Sheet #7 - seventh in a series
Folding Cheat Sheet #7 - seventh in a series
 
@Call @Girls in Surat 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Surat Avaulable
 @Call @Girls in Surat 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Surat Avaulable @Call @Girls in Surat 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Surat Avaulable
@Call @Girls in Surat 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Surat Avaulable
 
@Call @Girls in Saharanpur 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Clas...
 @Call @Girls in Saharanpur 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Clas... @Call @Girls in Saharanpur 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Clas...
@Call @Girls in Saharanpur 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Clas...
 
Kolkata @ℂall @Girls ꧁❤ 000000000 ❤꧂@ℂall @Girls Service Vip Top Model Safe
Kolkata @ℂall @Girls ꧁❤ 000000000 ❤꧂@ℂall @Girls Service Vip Top Model SafeKolkata @ℂall @Girls ꧁❤ 000000000 ❤꧂@ℂall @Girls Service Vip Top Model Safe
Kolkata @ℂall @Girls ꧁❤ 000000000 ❤꧂@ℂall @Girls Service Vip Top Model Safe
 
Chennai @Call @Girls 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
Chennai @Call @Girls 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real MeetChennai @Call @Girls 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
Chennai @Call @Girls 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
 
Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps
Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple StepsSeamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps
Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple Steps
 
Java SE 17 Study Guide for Certification - Chapter 01
Java SE 17 Study Guide for Certification - Chapter 01Java SE 17 Study Guide for Certification - Chapter 01
Java SE 17 Study Guide for Certification - Chapter 01
 
dachnug51 - HCLs evolution of the employee experience platform.pdf
dachnug51 - HCLs evolution of the employee experience platform.pdfdachnug51 - HCLs evolution of the employee experience platform.pdf
dachnug51 - HCLs evolution of the employee experience platform.pdf
 

OrigoDB - take the red pill

  • 1. OrigoDB Build faster systems faster
  • 2. Robert Friberg • Design, build and maintain systems for clients at Devrex • Trainer – Microsoft NET, SQL Server, java, perl, python, linux • Machine learning, AI • Squash fanatic • @robertfriberg, robert@devrexlabs.com
  • 3. Why? Service Layer Domain Layer Data Access Layer Relational Model Views/SP’s Build faster systems faster
  • 4. What is OrigoDB? • In-memory database toolkit • Code and data in same process • Write-ahead command logging and snapshots • Open Source single DLL for NET/Mono • Commercial server with mirror replication
  • 5. How does it work? .NET Process Storage Handles queries and commands, guards model Engine 1. AppendToLog 2. Execute command PlaceOrderCommand Snapshot Snapshot Client code passes commands and queries PlaceOrderCommand NewCustomerCommand IncreaseInventoryLevelCommand PlaceOrderCommand PlaceOrderCommand time In-memory Model
  • 6. Demand drives change • Performance • Data volume • Scalability • Availability • Modeling • NoSQL • Big data • Graph • Real time analytics • In-memory computing • Column stores One size (RDBMS) no longer fits all Polyglot Persistence
  • 7. B-trees and Transactions LOG • Fill factor • Page splits • Clustered index • Checkpoint DATA 64KB blocks w 8x8KB pages Logical BTREE of 8kb data pages In the buffer pool (cache) Buffer Manager Transactions append inserted, deleted, original and modified pages to the LOG
  • 8. When? • Whenever data fits in RAM • Alternative to general RDBMS OLAP/OLTP • Complex models and transactions • In-memory analytics • Traceability requirements (complete history of events)
  • 10. Start your engines! var engine = Engine.LoadOrCreate<SalesModel>(); // lambda query var customer = engine.Execute(db => db.Customers.GetById(42)); //Command object var cmd = new PlaceOrderCommand(customer.Id, newOrder); engine.Execute(cmd); engine.Close();
  • 11. http://geekstream.devrexlabs.com • 2 Core, 8GB RAM Cloud VM • IIS Web, SPA, ajax, ASP.NET MVC3 • OrigoDB Server same host, currently 4GB process memory • 3k blogs, 500k posts, 500k keywords, 33 million links • Journal 1 GB, no snapshots, growth ~ 8MB/day
  • 12. • Environmental news referral since 1997 • 100 articles/day, fulltext search, summaries, categories, sources, metadata • 5000 subscribers, clients, users, billing • Email history, weekly newsletters • < 4 GB Total RAM
  • 14. Creating a data model • Domain specific vs. Generic vs. Hybrid • Rich vs. Anemic • Explicit vs. Implicit commands • References vs. Foreign keys
  • 15. Computational model types • Interpreter hosting – Javascript, Roslyn • Lucene index • Machine learning models (Accord.NET)
  • 16. Object oriented domain modeling • DDD? • Entities and collections • Choose collections wisely – space/time tradeoffs • Transaction script pattern or thin commands • Avoid CRUD
  • 17. Silly Relational [Serializable] public class RelationalModel : Model { private DataSet _dataset; public RelationalModel() { _dataset = new DataSet(); } //... ExecuteQuery and ExecuteCommand omitted }
  • 18. Generic Relational [Serializable] public class RelationalModel : Model { Dictionary<string,SortedDictionary<object>> _tables; }
  • 19. Domain specific relational [Serializable] public class Model : Model { SortedDictionary<int,Customer> _customers; SortedDictionary<int,Order> _orders; SortedDictionary<int,Product> _products; SortedDictionary<string,Customer> _customersByName; } [Serializable] public class Order { public int CustomerId; //foreign key vs. reference }
  • 20. JS interpreter hosting (V8) [Serializable] public class JurassicModel : Model { private ScriptEngine _scriptEngine; public JurassicModel() { _scriptEngine = new ScriptEngine(); _scriptEngine.Execute("var model = {}"); } //... ExecuteQuery and ExecuteCommand omitted }
  • 21. Commands • Serial execution • Exclusive access to the model • Transition the model from one valid state to the next s0 t s1 s2 1 t2
  • 22. Command guidelines • No side effects or external actions • No external dependencies • Unhandled exceptions trigger rollback (full restore) • Call Command.Abort() to signal exception
  • 23. The model is an object graph TaskList Task Task Task TaskList Task Task Task Task Category Category Category Category TaskModel
  • 24. Query alternatives • Ad-hoc lambda: Engine.Execute(Func<M,R> query) • Derive from Query<M,R> • Compiled LINQ: Engine.Execute<R>(string, args)
  • 25. Query guidelines • Know thy object graphs • Don’t modify the model
  • 26. Demo: HockeySkolan • ASP.NET MVC 3 with backing OrigoDB • Domain specific model + CmsModel • Anemic model => fat commands, model is data
  • 27. OrigoDB Workshop Module 3 - Testing
  • 28. Automated Test alternatives • Transparent testing of domain behavior: entities, model • Test commands, queries, entities on model without engine • Test with in-memory storage • Full stack testing – slow, requires cleanup
  • 29. In-memory storage • Non persistent command journal and snapshots • Mimics FileStore using MemoryStreams • Tests serialization/identity issues var config = EngineConfiguration.Create().ForIsolatedTest(); OR: config.SetCommandStoreFactory(cfg => new InMemoryCommandStore(cfg)); config.SetSnapshotStoreFactory(cfg => new InMemorySnapshotStore(cfg));
  • 30. Demo: RedisModel • Testing model behavior with NUnit
  • 31. OrigoDB Workshop Module 4 – Hosting
  • 32. Direct in-process engine creation • Static Engine methods • Create() • LoadOrCreate() • Load() • Returns: Engine, Engine<M> Engine<MyModel> engine = Engine.LoadOrCreate<MyModel>();
  • 33. Engine.For<M>() • Returns IEngine<M>() or derivative • Reuse based on EngineConfiguration.Location property • Remote or in-process • ILocalEngineClient<M> • IRemoteEngineClient<M> • Running engines are tracked by Config.Engines
  • 34. Db.For<M>() • Returns a proxy for M • Remote or Local analogous to Engine.For<M>
  • 35. x64 vs. x32 • Core Library compiled with AnyCPU • x32 = 32-bit pointers, max 4GB • x64 = 64-bit pointers • Server ships with x64 and x32 binaries
  • 36. IIS Hosting • Disable application pool recycling • Ensure single process, no farming or LB • Litter controllers with Db.For<M>() / Engine.For<M>() • Or put a static ref somewhere, eg Global.asax
  • 37. Proxy • Proxy has same interface as the Model • Method calls are intercepted • void methods interpreted as commands (and logged) • other methods interpreted as queries • Can be overriden with attributes • Local or remote, cluster
  • 38. Demo: Let’s build a key/value store • New project • Reference origodb.core • Define KeyValueStoreModel • void Put(key, value) • object Get(key,value) • bool Exists(key, value) • bool Remove(key,value) • Add some unit tests
  • 39. OrigoDB Workshop Module 5 – Configuration
  • 40. EngineConfiguration class – key properties • AsyncJournaling • EnsureSafeResults • Kernel • Location • PacketOptions • PersistenceMode • SnapshotBehavior
  • 41. EngineConfiguration.Location property • File location for FileStorage • Connection string when SqlStorage • Defaults (when null) • Will look in app.config for connection string • Type name of model • Current working directory • App_Data in web context • Magic • mode=remote;host=10.0.0.20;port=3001
  • 42. Persistence modes • Journaling (default) • SnapshotPerTransaction • ManualSnapshots var config = EngineConfiguration.Create(); config.PersistenceMode = PersistenceMode.SnapshotPerTransaction; var db = Engine.For<MyModel>(config);
  • 43. Kernels • OptimisticKernel (default) • RoyalFoodTaster var config = EngineConfiguration.Create(); config.Kernel = Kernels.RoyalFoodTaster; var db = Db.For<MyModel>(config);
  • 44. Logging • Logging disabled by default //enable logging ConsoleLogger.MinimumLevel = LogLevel.Trace; //Plugin custom logger LogProvider.SetFactory(new Log4NetLoggerFactory());
  • 45. Extensibility • EngineConfiguration methods • SetAuthorizerFactory() • SetSynchronizerFactory() • SetCommandStoreFactory() • SetFormatterFactory()
  • 46. ProtobufFormatter • Protocol Buffers by Google • IFormatter wrapper around protobuf-net by @marcgravell • Contract based as opposed to embedded metadata • Compact, fast, loose coupling, cross platform • Configure with attributes or code • Use it!
  • 47. Protobuf: Attribute based configuration [ProtoContract] public class Company { [ProtoMember(1)] public string Name { get; set; } [ProtoMember(2)] public List<Employee> Employees { get; set; } }
  • 48. Protobuf: Code-based configuration var typeModel = TypeModel.Create(); typeModel.Add(typeof (Company), false) .Add(1, ”Name") .Add(2, ”Employees");
  • 49. Inject formatter factory //use helper methods ProtoBufFormatter.ConfigureSnapshots<MyModel>(config, typeModel); ProtoBufFormatter.Configure(config, FormatterUsage.Results, typeModel); //or do it yourself config.SetFormatterFactory((cfg,fu) => new ProtoBufFormatter<MyModel>(typeModel), FormatterUsage.Snapshot);
  • 50. OrigoDB Workshop Module 6 – Immutability
  • 51. Immutability and blocking writer reader
  • 52. States share immutable objects s0 s2 s s3 1 (Animated slide)
  • 57. OrigoDB Workshop Module 6 – Server
  • 58. OrigoDB Server • Console Application or Windows Service • Process hosting single Engine / Model • Ad-hoc Linq / Razor queries • Javascript API • Primitive web based UI • Commercial License • Multiserver replication
  • 59. Transparent client migration • Configuration strings: • mode=embedded • mode=remote;host=10.10.10.10;port=3001
  • 60. Lab M6 • Follow the OrigoDB Server online tutorial http://origodb.com/
  • 61. Thank you for listening! • http://origodb.com • http://dev.origodb.com • http://github.com/devrexlabs • http://geekstream.devrexlabs.com • @robertfriberg, @devrexlabs

Editor's Notes

  1. What is it? How does it work? Who built it and why? When does it shine? When does it suck?
  2. What if we just keep all the data in RAM? Moving back and forth and mapping is silly. Code and data in same process. Productivity Simplicity Consistency Testability Strongly typed, compile time checked Operations
  3. Capturing the essence.. In-memory In-memory object graph, user defined. Probably collections, entities and references. Your choice. Is it a database? Is it an object database? Linq queries. Toolkit Flexible, configurable, kernels, storage, data model, persistence modes, formatting Bring your own model. – this is key. Usually a product based on a specific data model. VoltDB, Raven Naming. LiveDomain -> LiveDB -> OrigoDB Code and data in same process Don’t do CRUD. It’s silly. ORMS are based on crud. One of the first thing you learn is don’t do SELECT *. EF Command logging The in-memory data is a projection of the commands, compare ES with a single aggregate. Same benefits as ES. Requires NET 4.0
  4. What is OrigoDB? OrigoDB is an in-memory database toolkit. The core component is the Engine. The engine is 100% ACID, runs in-process and hosts a user defined data model. The data model can be domain specific or generic and is defined using plain old NET types. Persistence is based on snapshots and write-ahead command logging to the underlying storage. The Model is an instance of the user defined data model lives in RAM only is the data is a projection of the entire sequence of commands applied to the initial model, usually empty. can only be accessed through the engine The Client has no direct reference to the model interacts directly with the Engine either in-process or remote or indirectly via a proxy with the same interface as the model passes query and command objects to the engine The Engine The Engine encapsulates an instance of the model and is responsible for atomicity, consistency, isolation and durability. It performs the following tasks: writes commands to the journal executes commands and queries reads and writes snapshots restores the model on startup We call it a toolkit because you have a lot of options Modelling - define your own model or use an existing one. Generic or domain specific. It’s up to you. Storage - Default is FileStore. SqlStore or write your own module. Data format - Choose wire and storage format by plugging in different IFormatter implementations. Binary, JSON, ProtoBuf, etc Read more in the docs on Extensibility Design goals Our initial design goals were focused on rapid development, testability, simplicity, correctness, modularity, flexibility and extensibility. Performance was never a goal but running in-memory with memory optimized data structures outperforms any disk oriented system. But of course a lot of optimization is possible.
  5. Performance –> in-memory, specialization Data volume -> sharding, partitioning Availability -> redundancy Mångfald, det händer saker.
  6. Fi B-TREE, 8kb block, buffer pool, animering av en transaktion. Column stores Varje tabell är en B-TREE (om den inte är en HEAP), varje index är en b-tree Effect logging – log the effect of the transaction = modified pages, new pages Support rollback by including deleted pages and original version of modified page.
  7. Simplicity and all that comes with it. 40% less code. Reason enough. Low latency queries, heavy load querying With event sourcing, polyglot persistence. Build a read model from an event stream Complex domain models: Because a trivial model is trivial to ORM, RDBMS. Difficult to model relationally
  8. An in-memory instance of the Model is the data. Commands are like Stored Procedures Queries are like Views Ad-hoc LINQ
  9. A quick example
  10. Show the web site, search, show about, mention github, show some code
  11. approx 500’ articles
  12. Not necessarily data
  13. Sole purpose is to update the state of the model, from one state to another. Avoid embedding entities and graphs, regard commands as simple messages.
  14. Lambdas won’t serialize – local process only
  15. Results get cloned unless otherwise specified.
  16. Show the model, the entities, the commands. Queries/lambdas in controllers. Show hosting in global.asax
  17. Describe the In-memory store and config for isolated test Depends on where the logic is, commands or model or both Test with storage exercises serialization, use to ensure serialization and isolation Full stack as smoke tests and to verify configuration or framework related behavior
  18. Considerations when hosting the in-process engine and model. Lifecycle
  19. Snapshots, direct interaction, Dispose, plenty of overloads taking config, config-string, initial model
  20. Abstraction for convenience
  21. Thread safe execute overloads
  22. Or – demonstrate geeksream
  23. Considerations when hosting the in-process engine and model. Lifecycle
  24. Explain each briefly
  25. Pretty messy, leaky abstractions, needs redesign. Any takers?
  26. Authorizer uses IPrincical and Roles of current thread identity. Synchronizer unimportant, ReaderWriterLockSlim default SqlStorage, EventStoreStore, Azure TableStorage for snapshots BinaryFormatter, JsonFormatter, ProtobufFormatter
  27. Compare with BinaryFormatter, Reflection Use it: In production, let the design stabilize first
  28. Considerations when hosting the in-process engine and model. Lifecycle
  29. Write transactions are serialized without blocking readers. Reader gets the most recent state.
  30. This is an animated slide
  31. _tasks.ToArray() creates a new array, thus no way to modify the _tasks array. AddTask() returns a new TodoModel instance, thus it is immutable Strings are immutable. The strings are shared among consecutive instances of TodoModel
  32. Could have had an IsCompleted() method and assert !IsCompleted() in the Complete method. But the point is that instances of Task are immutable.
  33. Notice base class and out parameter on execute
  34. Considerations when hosting the in-process engine and model. Lifecycle