SlideShare a Scribd company logo
1 of 77
Data
Wars
The Bloody Enterprise
strikes back
Victor
Polischuk
@alkovictor
It is GOOD
when we
have a lot of
data
when we
have data
several years
old, the older
the better
It is
BAD
when we
have to
remove
historical
data
It is BAD
when we
have a lot of
code
when we
have code
several years
old, the older
the worse
It is
GOOD
when we
have to
remove
historical
code
Money,
numbers, and
arithmetic
Identities
Text data and
Strings
Date and time
Please
Participate
Money
Money
Float & Double
Convert to Integer
Money Float &
Double
Problem
Developers usually have no idea how it is represented:
• 𝑒 = 2.718281828459045
• π = 3.141592653589793
• tan
π
2
= 1.633123935319537𝑬16
Money Float &
Double
Quiz #1
• = ?
Float: 0.6 + 0.1
• = ?
Double: 0.6 + 0.1
Money Float &
Double
Quiz #1
• = 0.70000005
Float: 0.6 + 0.1
• = 0.7
Double: 0.6 + 0.1
Money: Float & Double: stackoverflow.com
Money Float &
Double
Quiz #2
• = ?
Float: 0.2 + 0.1
• = ?
Double: 0.2 + 0.1
Money Float &
Double
Quiz #2
• = 0.3
Float: 0.2 + 0.1
• = 0.30000000000000004
Double: 0.2 + 0.1
Money Float &
Double
Drill
Down
• Binary representation: [sign] [exponent] [mantissa]
• Float: 1 bit, 8 bits, 23 bits
• Double: 1 bit, 11 bits, 52 bits
• Value: (2 ∗ 1 − 𝑠 − 1) ∗ 2 𝑒−2 𝐸−1−1 ∗ (1 + 𝑚/2 𝑀)
0.1f = 0-01111011-10011001100110011001101
0.1f = + 2-127+123 * (2-1 + 2-4 + 2-5 + 2-8 + 2-9 + 2-12 + 2-13 + 2-16 + 2-17 …)
0.1f = 2-4 * (1 + 5033165 / 223) = 0.100000001490116119384765625
Money Float &
Double
Example
Money Float &
Double
Quiz #3
+0.0f = 0-00000000-00000000000000000000000
-0.0f = 1-00000000-00000000000000000000000
+0.0f == -0.0f?
Money Float &
Double
Drill
Down
/**
* Get or create float value for the given float.
*
* @param d the float
* @return the value
*/
public static ValueFloat get(float d) {
if (d == 1.0F) {
return ONE;
} else if (d == 0.0F) {
// -0.0 == 0.0, and we want to return 0.0 for both
return ZERO;
}
return (ValueFloat) Value.cache(new ValueFloat(d));
}
Money Float &
Double
Summary
Just never use it
Forget it exists
Unless you are working on a video codec
Money Convert
to Integer
Multiply decimals up to integers
• (as a constant probably)
Keep the “scale” somewhere else
Money Convert
to Integer
Quiz #1
•= ?
10 * 230 + 5
Money Convert
to Integer
Quiz #1
•= 28, where 10 is 10%
10 * 230 + 5
Money Convert
to Integer
Drill
Down
@Embeddable
public class Amount implements Serializable {
private int rate;
@Transient
private final int scale;
public Amount() {
scale = 6;
}
public Amount(int rate, int scale) {
this.scale = scale;
setRate(rate);
}
…
Money Convert
to Integer
Summary
• It is better to keep precision closer to the number
• It is better when arithmetic just works
• It is better when equals and compareTo work
• int <*/+> int can exceed int (same with long)
• Consistency is almost always above performance
Money Solution BigDecimal
Precision and accuracy are known and adjustable
Arithmetic is included
Supported by JDK, JDBC, and etc
Performance is quite nice
identity
Identity
Unexpected Overflow
UUID
Identity Overflow
Integer and Long are finite types
Sometimes they can overflow
Moreover they usually twice smaller than you think
Identity Overflow Example
Identity Overflow Example
Identity Overflow
Sucker
Punch
• Also, “some languages” cannot work with 53+ bits integer types
• In addition, “some languages” work with custom 32-bit integer types
Identity Overflow Summary
There is a difference between DB and API identity
• Always use integer types as identity for DB
• Always use text types as identity for API
• Avoid using 32- bit types as identity at all
Unless you are 99.9% sure
Identity UUID
• Are not guaranteed to be globally unique
• Not K-ordered
• In most of the cases are excessively big (128 bit)
• Can be the reason of a serious performance degradation
• Have different versions which may suite better or worse
• Strangely enough RDBMS rarely supports UUID/GUID data types
• Weird:
• Time based on 100-nanosecond intervals since 15th of October 1582
• Were invented/published around 1999
Identity UUID
Store as
String
• 16 bytes
UUID is 128-bit value
• 36 symbols – which is more than 2 times bigger
A96A0D4C-49D0-4431-B126-4C66688ADEF3
Identity UUID
Drill
Down
High long
32
time_low
16
time_mid
4
version
12
time_hi
Low long
4
variant
12
clock_seq
48
node
Identity UUID Example
$ uuidgen
0c8aa0f6-9f6f-4fad-9662-1b683f2f4a0d
$ uuidgen
1ee09695-3a04-4e7a-8bab-e67dabc4b5a2
$ uuidgen -t
3770f4d0-88b3-11e6-bba6-005056bb68cb
$ uuidgen -t
3b14dd54-88b3-11e6-8c53-005056bb68cb
Identity Solution
• Use text representation for public identities (API)
• Database Sequences (Long)
• UUID + Database Sequences (Long)
• UUID (BigInteger/Binary)
• Twitter Snowflake (Long) – outdated
• UUID (String)
• *Flake (128 bit)
String
String
Java and encoding
JDBC drivers and DB types
String Encoding
Java uses UTF-16 for String encoding
UTF-16 has symbol range: 0x0000..0x10FFFF
String uses char[] (byte[] in JDK9)
Char has range: 0x0000..0xFFFF
String Encoding Quiz #1
How to represent
range
0x100000..0x10FFFF
using char?
String Encoding Quiz #1
• Define surrogate range: 0xD800..0xDFFF (0x800 characters)
• Split it equally to “High”: 0xD800..0xDBFF and “Low”:
0xDC00..0xDFFF
• Combine “High”-to-“Low” to get 0x400 * 0x400 = 0x100000 symbols
• Profit???
• Profit!!!
String Encoding Quiz #2
String x = new String(new char[]{
'z',0xD801,0xDC37,'a','b','c'
});
System.out.println(x);
System.out.println(x.substring(0,2));
System.out.println(x.substring(2));
String Encoding Quiz #2
z𐐷abc
z?
?abc
String Encoding Solution
No solution, just be aware
Yet, it might be more sophisticated soon
String JDBC vs
DB
Mapping DB specific types to JDBC
Some DB or driver exceptional cases
BLOB vs CLOB
Narrower DB encoding
String JDBC vs
DB
Mapping
public enum JDBCType implements SQLType {
CHAR(Types.CHAR),
VARCHAR(Types.VARCHAR),
LONGVARCHAR(Types.LONGVARCHAR),
...
BLOB(Types.BLOB),
CLOB(Types.CLOB),
...
NCHAR(Types.NCHAR),
NVARCHAR(Types.NVARCHAR),
LONGNVARCHAR(Types.LONGNVARCHAR),
NCLOB(Types.NCLOB),
String JDBC vs
DB
Mapping
• CHARACTER [(len)] or CHAR [(len)]
• VARCHAR (len)
• BOOLEAN
• SMALLINT
• INTEGER or INT
• DECIMAL [(p[,s])] or DEC [(p[,s])]
• NUMERIC [(p[,s])]
• REAL
• FLOAT(p)
• DOUBLE PRECISION
• DATE
• TIME
• TIMESTAMP
• CLOB [(len)] or CHARACTER LARGE OBJECT [(len)] or CHAR LARGE OBJECT [(len)]
• BLOB [(len)] or BINARY LARGE OBJECT [(len)]
String JDBC vs
DB
Quiz #1
What is JDBC
type
LONGVARCHAR?
String JDBC vs
DB
Drill
Down
setStringInternal(int var1,String var2) throws SQLException {
...
int var6 = var2 != null?var2.length():0;
...
if(var6 <= this.maxVcsCharsSql) {
this.basicBindString(var1, var2);
} else if(var6 <= this.maxStreamNCharsSql) {
this.setStringForClobCritical(var1, var2);
} else {
this.setStringForClobCritical(var1, var2);
}
String JDBC vs
DB
CHAR &
VARCHAR
String JDBC vs
DB
BLOB &
CLOB
• just bytes
Binary Large OBject
• just characters in your DB encoding
Character Large OBject
String JDBC vs
DB
Char &
NChar
• uses your DB encoding or no encoding
Char, Varchar, CLOB…
• uses specified encoding
NChar, NVarchar, NCLOB…
• does not have NBLOB
BLOB
String JDBC vs
DB
Cp1251 vs
Cp1252
Sometimes encoding does not matter much
Unless too smart drivers spoil it
Unless they are not compatible
String JDBC vs
DB
Solution
Check your DB encoding upfront
If needed use N* DB types and N* JDBC types as well
String JDBC vs
DB
Solution
Losing data because of encoding is lame
If you expect some strange strings coming use N* types
Never forget that symbol is not a char/byte it may save you one day
Your JDBC driver can screw you
Date
Date
Time zones
DST and leap miracles
Date Time
Zone
Does DB and App time zone match?
What can go wrong if they don’t?
Date Time
Zone
Quiz #1
• Database: Oracle 11g
• Database time zone: CET/CEST (+01:00/+02:00)
• Application: Java 8
• Application time zone: EET/EEST (+02:00/+03:00)
• setTimestamp(‘2016-10-14 15:35:01’)?
• getTimestamp()?
Date Time
Zone
Quiz #1
Hint
final int oracleYear(int var1) {
int var2 = ((this.rowSpaceByte[0 + var1] & 255) - 100) * 100
+ (this.rowSpaceByte[1 + var1] & 255) - 100;
return var2 <= 0?var2 + 1:var2;
}
final int oracleMonth(int var1) { return this.rowSpaceByte[2 + var1] - 1; }
final int oracleDay(int var1) { return this.rowSpaceByte[3 + var1]; }
final int oracleHour(int var1) { return this.rowSpaceByte[4 + var1] - 1; }
final int oracleMin(int var1) { return this.rowSpaceByte[5 + var1] - 1; }
final int oracleSec(int var1) { return this.rowSpaceByte[6 + var1] - 1; }
final int oracleTZ1(int var1) { return this.rowSpaceByte[11 + var1]; }
final int oracleTZ2(int var1) { return this.rowSpaceByte[12 + var1]; }
Date Time
Zone
Quiz #1
• 2016-10-14 15:35:01
Database
• 2016-10-14 15:35:01
Application
Date Time
Zone
Quiz #1
• 2016-10-14 15:35:01
Database
• 2016-10-14 15:35:01
Application with UTC time zone
Date Time
Zone
Quiz #2
JavaScript client: time zone unknown
Java server: EET time zone
How to pass dates?
Date Time
Zone
Quiz #2
• Date… ehmm… JSON does not know what it is…
• Long is a bit of a problem for 53+ impotent integer types (now 41,
~140,000 years and we will cross the border)
• String as ISO 8601 is a lesser evil
Date Time
Zone
Solution
Use the same App/DB time zone
Check your DB driver to ensure conversion safety
Store timestamps as long: DB and API
Store timestamps as String: API
Date DST &
Magic
Missing and extra hours
Leap seconds
Date DST &
Magic
Calculations
24 hours in a day
60 minutes in an hour
60 seconds in a minute
FTW: 24 * 60 * 60 * 1000
Date DST &
Magic
Quiz #1
27.03.2016 00:00:00 - 28.03.2016 00:00:00 (EET/EEST)
Date DST &
Magic
Quiz #1
26.03.2016 22:00:00 - 27.03.2016 21:00:00 (UTC) – 23h
Date DST &
Magic
Quiz #2
31.12.2016 00:00:00 – 01.01.2017 00:00:00 (EET/EEST)
01.01.2017 00:00:00 – 02.01.2017 00:00:00 (EET/EEST)
Date DST &
Magic
Quiz #2
30.12.2016 22:00:00 – 31.01.2017 22:00:00 (UTC) – 24h
31.12.2017 22:00:00 – 01.01.2017 22:00:00 (UTC) – 24h+1s
Date DST &
Magic
Quiz #2
It will happen: 31.12.2016 23:59:60 (UTC)
It had happened: 30.06.2015 23:59:60 (UTC)
Blame the Earth, and Moon, and Sun
Blame software developers
Date One Last
Thing
Date vs
Interval
Date is a tuple of year, month, day, hour, and etc.
Instant is a precise point on the timeline
Date One Last
Thing
Date vs
Interval
Date can be converted to Instant
Instant can be converted to Date
• even within a Chronology
However, “conversion rate” is not constant
Date Summary
• Use UTC as much as possible
• Keep in mind the difference between Date and Instant
• Think of Date/Instant interoperation as it was designed/used by
idiots
• 24*60*60*1000 is, basically, simplification. Quite harmful at times.
• Use proper date libraries – you wouldn’t want to reinvent it again.
• GMT is not yet another name for UTC, beware!
Thank
you

More Related Content

What's hot

Improving PySpark Performance - Spark Beyond the JVM @ PyData DC 2016
Improving PySpark Performance - Spark Beyond the JVM @ PyData DC 2016Improving PySpark Performance - Spark Beyond the JVM @ PyData DC 2016
Improving PySpark Performance - Spark Beyond the JVM @ PyData DC 2016Holden Karau
 
MongoDB: Optimising for Performance, Scale & Analytics
MongoDB: Optimising for Performance, Scale & AnalyticsMongoDB: Optimising for Performance, Scale & Analytics
MongoDB: Optimising for Performance, Scale & AnalyticsServer Density
 
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...HappyDev
 
Beyond parallelize and collect - Spark Summit East 2016
Beyond parallelize and collect - Spark Summit East 2016Beyond parallelize and collect - Spark Summit East 2016
Beyond parallelize and collect - Spark Summit East 2016Holden Karau
 
Sasi, cassandra on the full text search ride At Voxxed Day Belgrade 2016
Sasi, cassandra on the full text search ride At  Voxxed Day Belgrade 2016Sasi, cassandra on the full text search ride At  Voxxed Day Belgrade 2016
Sasi, cassandra on the full text search ride At Voxxed Day Belgrade 2016Duyhai Doan
 
Cassandra introduction 2016
Cassandra introduction 2016Cassandra introduction 2016
Cassandra introduction 2016Duyhai Doan
 
Cassandra Community Webinar | Getting Started with Apache Cassandra with Patr...
Cassandra Community Webinar | Getting Started with Apache Cassandra with Patr...Cassandra Community Webinar | Getting Started with Apache Cassandra with Patr...
Cassandra Community Webinar | Getting Started with Apache Cassandra with Patr...DataStax Academy
 
Cassandra EU - Data model on fire
Cassandra EU - Data model on fireCassandra EU - Data model on fire
Cassandra EU - Data model on firePatrick McFadin
 
Game of Fraud Detection with SQL and Machine Learning
Game of Fraud Detection with SQL and Machine LearningGame of Fraud Detection with SQL and Machine Learning
Game of Fraud Detection with SQL and Machine LearningChris Saxon
 
Successful Architectures for Fast Data
Successful Architectures for Fast DataSuccessful Architectures for Fast Data
Successful Architectures for Fast DataPatrick McFadin
 
Cassandra 3.0 - JSON at scale - StampedeCon 2015
Cassandra 3.0 - JSON at scale - StampedeCon 2015Cassandra 3.0 - JSON at scale - StampedeCon 2015
Cassandra 3.0 - JSON at scale - StampedeCon 2015StampedeCon
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeWim Godden
 
Advanced Sharding Features in MongoDB 2.4
Advanced Sharding Features in MongoDB 2.4 Advanced Sharding Features in MongoDB 2.4
Advanced Sharding Features in MongoDB 2.4 MongoDB
 
Beyond Shuffling - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...
Beyond Shuffling  - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...Beyond Shuffling  - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...
Beyond Shuffling - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...Holden Karau
 
Introduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at lastIntroduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at lastHolden Karau
 
Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...
Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...
Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...CloudxLab
 
Apache Spark Structured Streaming for Machine Learning - StrataConf 2016
Apache Spark Structured Streaming for Machine Learning - StrataConf 2016Apache Spark Structured Streaming for Machine Learning - StrataConf 2016
Apache Spark Structured Streaming for Machine Learning - StrataConf 2016Holden Karau
 
(SDD407) Amazon DynamoDB: Data Modeling and Scaling Best Practices | AWS re:I...
(SDD407) Amazon DynamoDB: Data Modeling and Scaling Best Practices | AWS re:I...(SDD407) Amazon DynamoDB: Data Modeling and Scaling Best Practices | AWS re:I...
(SDD407) Amazon DynamoDB: Data Modeling and Scaling Best Practices | AWS re:I...Amazon Web Services
 

What's hot (20)

Improving PySpark Performance - Spark Beyond the JVM @ PyData DC 2016
Improving PySpark Performance - Spark Beyond the JVM @ PyData DC 2016Improving PySpark Performance - Spark Beyond the JVM @ PyData DC 2016
Improving PySpark Performance - Spark Beyond the JVM @ PyData DC 2016
 
MongoDB: Optimising for Performance, Scale & Analytics
MongoDB: Optimising for Performance, Scale & AnalyticsMongoDB: Optimising for Performance, Scale & Analytics
MongoDB: Optimising for Performance, Scale & Analytics
 
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
2015-12-05 Александр Коротков, Иван Панченко - Слабо-структурированные данные...
 
Beyond parallelize and collect - Spark Summit East 2016
Beyond parallelize and collect - Spark Summit East 2016Beyond parallelize and collect - Spark Summit East 2016
Beyond parallelize and collect - Spark Summit East 2016
 
Sasi, cassandra on the full text search ride At Voxxed Day Belgrade 2016
Sasi, cassandra on the full text search ride At  Voxxed Day Belgrade 2016Sasi, cassandra on the full text search ride At  Voxxed Day Belgrade 2016
Sasi, cassandra on the full text search ride At Voxxed Day Belgrade 2016
 
Under the Covers of DynamoDB
Under the Covers of DynamoDBUnder the Covers of DynamoDB
Under the Covers of DynamoDB
 
Cassandra introduction 2016
Cassandra introduction 2016Cassandra introduction 2016
Cassandra introduction 2016
 
Cassandra Community Webinar | Getting Started with Apache Cassandra with Patr...
Cassandra Community Webinar | Getting Started with Apache Cassandra with Patr...Cassandra Community Webinar | Getting Started with Apache Cassandra with Patr...
Cassandra Community Webinar | Getting Started with Apache Cassandra with Patr...
 
Cassandra EU - Data model on fire
Cassandra EU - Data model on fireCassandra EU - Data model on fire
Cassandra EU - Data model on fire
 
Game of Fraud Detection with SQL and Machine Learning
Game of Fraud Detection with SQL and Machine LearningGame of Fraud Detection with SQL and Machine Learning
Game of Fraud Detection with SQL and Machine Learning
 
Successful Architectures for Fast Data
Successful Architectures for Fast DataSuccessful Architectures for Fast Data
Successful Architectures for Fast Data
 
Full Text Search In PostgreSQL
Full Text Search In PostgreSQLFull Text Search In PostgreSQL
Full Text Search In PostgreSQL
 
Cassandra 3.0 - JSON at scale - StampedeCon 2015
Cassandra 3.0 - JSON at scale - StampedeCon 2015Cassandra 3.0 - JSON at scale - StampedeCon 2015
Cassandra 3.0 - JSON at scale - StampedeCon 2015
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
Advanced Sharding Features in MongoDB 2.4
Advanced Sharding Features in MongoDB 2.4 Advanced Sharding Features in MongoDB 2.4
Advanced Sharding Features in MongoDB 2.4
 
Beyond Shuffling - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...
Beyond Shuffling  - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...Beyond Shuffling  - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...
Beyond Shuffling - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...
 
Introduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at lastIntroduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at last
 
Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...
Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...
Apache Spark - Key Value RDD - Transformations | Big Data Hadoop Spark Tutori...
 
Apache Spark Structured Streaming for Machine Learning - StrataConf 2016
Apache Spark Structured Streaming for Machine Learning - StrataConf 2016Apache Spark Structured Streaming for Machine Learning - StrataConf 2016
Apache Spark Structured Streaming for Machine Learning - StrataConf 2016
 
(SDD407) Amazon DynamoDB: Data Modeling and Scaling Best Practices | AWS re:I...
(SDD407) Amazon DynamoDB: Data Modeling and Scaling Best Practices | AWS re:I...(SDD407) Amazon DynamoDB: Data Modeling and Scaling Best Practices | AWS re:I...
(SDD407) Amazon DynamoDB: Data Modeling and Scaling Best Practices | AWS re:I...
 

Viewers also liked

Impacto De Las tics
Impacto De Las ticsImpacto De Las tics
Impacto De Las ticsvivian
 
UMN_FactSheet_Release 0715
UMN_FactSheet_Release 0715UMN_FactSheet_Release 0715
UMN_FactSheet_Release 0715Julianne Rantala
 
Alternative Routes of Administration for Oral Medications
Alternative Routes of Administration for Oral MedicationsAlternative Routes of Administration for Oral Medications
Alternative Routes of Administration for Oral MedicationsAnna Schemel
 
استعمال الزمن بالوسط القروي
 استعمال الزمن بالوسط القروي  استعمال الزمن بالوسط القروي
استعمال الزمن بالوسط القروي TEFO1
 
Demonstrate the Value of Customer Education Using Salesforce
Demonstrate the Value of Customer Education Using SalesforceDemonstrate the Value of Customer Education Using Salesforce
Demonstrate the Value of Customer Education Using SalesforceServiceRocket
 
Jishu Shi - U.S-China Center for Animal Health, Kansas State University
Jishu Shi - U.S-China Center for Animal Health, Kansas State UniversityJishu Shi - U.S-China Center for Animal Health, Kansas State University
Jishu Shi - U.S-China Center for Animal Health, Kansas State UniversityKisaco Research
 
WebCamp 2016: Python_Кирилл Перевозчиков _Рецепты приготовления uWSGI
WebCamp 2016: Python_Кирилл Перевозчиков _Рецепты приготовления uWSGIWebCamp 2016: Python_Кирилл Перевозчиков _Рецепты приготовления uWSGI
WebCamp 2016: Python_Кирилл Перевозчиков _Рецепты приготовления uWSGIWebCamp
 
Mobile Horizons Istanbul 2013 - Deniz Güven
Mobile Horizons Istanbul 2013 - Deniz GüvenMobile Horizons Istanbul 2013 - Deniz Güven
Mobile Horizons Istanbul 2013 - Deniz GüvenMobile Horizons
 
Mobile Tower Radiations & its effects
Mobile Tower Radiations & its effectsMobile Tower Radiations & its effects
Mobile Tower Radiations & its effectsNishu Vora
 
Masöz Rüya İstanbul
Masöz Rüya İstanbulMasöz Rüya İstanbul
Masöz Rüya İstanbulAyşe Mutlu
 
Self-Organizing Logical-Clustering Topology for Managing Distributed Context ...
Self-Organizing Logical-Clustering Topology for Managing Distributed Context ...Self-Organizing Logical-Clustering Topology for Managing Distributed Context ...
Self-Organizing Logical-Clustering Topology for Managing Distributed Context ...Hasib ur Rahman, PhD
 

Viewers also liked (14)

Impacto De Las tics
Impacto De Las ticsImpacto De Las tics
Impacto De Las tics
 
Wissh Graphics
Wissh GraphicsWissh Graphics
Wissh Graphics
 
UMN_FactSheet_Release 0715
UMN_FactSheet_Release 0715UMN_FactSheet_Release 0715
UMN_FactSheet_Release 0715
 
Alternative Routes of Administration for Oral Medications
Alternative Routes of Administration for Oral MedicationsAlternative Routes of Administration for Oral Medications
Alternative Routes of Administration for Oral Medications
 
04 1122
04 112204 1122
04 1122
 
استعمال الزمن بالوسط القروي
 استعمال الزمن بالوسط القروي  استعمال الزمن بالوسط القروي
استعمال الزمن بالوسط القروي
 
Demonstrate the Value of Customer Education Using Salesforce
Demonstrate the Value of Customer Education Using SalesforceDemonstrate the Value of Customer Education Using Salesforce
Demonstrate the Value of Customer Education Using Salesforce
 
Proyecto de grado
Proyecto de gradoProyecto de grado
Proyecto de grado
 
Jishu Shi - U.S-China Center for Animal Health, Kansas State University
Jishu Shi - U.S-China Center for Animal Health, Kansas State UniversityJishu Shi - U.S-China Center for Animal Health, Kansas State University
Jishu Shi - U.S-China Center for Animal Health, Kansas State University
 
WebCamp 2016: Python_Кирилл Перевозчиков _Рецепты приготовления uWSGI
WebCamp 2016: Python_Кирилл Перевозчиков _Рецепты приготовления uWSGIWebCamp 2016: Python_Кирилл Перевозчиков _Рецепты приготовления uWSGI
WebCamp 2016: Python_Кирилл Перевозчиков _Рецепты приготовления uWSGI
 
Mobile Horizons Istanbul 2013 - Deniz Güven
Mobile Horizons Istanbul 2013 - Deniz GüvenMobile Horizons Istanbul 2013 - Deniz Güven
Mobile Horizons Istanbul 2013 - Deniz Güven
 
Mobile Tower Radiations & its effects
Mobile Tower Radiations & its effectsMobile Tower Radiations & its effects
Mobile Tower Radiations & its effects
 
Masöz Rüya İstanbul
Masöz Rüya İstanbulMasöz Rüya İstanbul
Masöz Rüya İstanbul
 
Self-Organizing Logical-Clustering Topology for Managing Distributed Context ...
Self-Organizing Logical-Clustering Topology for Managing Distributed Context ...Self-Organizing Logical-Clustering Topology for Managing Distributed Context ...
Self-Organizing Logical-Clustering Topology for Managing Distributed Context ...
 

Similar to Data Wars: The Bloody Enterprise strikes back

The Art Of Readable Code
The Art Of Readable CodeThe Art Of Readable Code
The Art Of Readable CodeBaidu, Inc.
 
Beyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the codeBeyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the codeWim Godden
 
Getting started with Spark & Cassandra by Jon Haddad of Datastax
Getting started with Spark & Cassandra by Jon Haddad of DatastaxGetting started with Spark & Cassandra by Jon Haddad of Datastax
Getting started with Spark & Cassandra by Jon Haddad of DatastaxData Con LA
 
Spark Summit EU talk by Ted Malaska
Spark Summit EU talk by Ted MalaskaSpark Summit EU talk by Ted Malaska
Spark Summit EU talk by Ted MalaskaSpark Summit
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeWim Godden
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeWim Godden
 
Beyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeBeyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeWim Godden
 
Beyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeBeyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeWim Godden
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeWim Godden
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeWim Godden
 
Ben Coverston - The Apache Cassandra Project
Ben Coverston - The Apache Cassandra ProjectBen Coverston - The Apache Cassandra Project
Ben Coverston - The Apache Cassandra ProjectMorningstar Tech Talks
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeWim Godden
 
Beyond php it's not (just) about the code
Beyond php   it's not (just) about the codeBeyond php   it's not (just) about the code
Beyond php it's not (just) about the codeWim Godden
 
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)Андрей Новиков
 
Jan 2015 - Cassandra101 Manchester Meetup
Jan 2015 - Cassandra101 Manchester MeetupJan 2015 - Cassandra101 Manchester Meetup
Jan 2015 - Cassandra101 Manchester MeetupChristopher Batey
 
Big Data Day LA 2016/ Hadoop/ Spark/ Kafka track - Data Provenance Support in...
Big Data Day LA 2016/ Hadoop/ Spark/ Kafka track - Data Provenance Support in...Big Data Day LA 2016/ Hadoop/ Spark/ Kafka track - Data Provenance Support in...
Big Data Day LA 2016/ Hadoop/ Spark/ Kafka track - Data Provenance Support in...Data Con LA
 
Migrating To PostgreSQL
Migrating To PostgreSQLMigrating To PostgreSQL
Migrating To PostgreSQLGrant Fritchey
 

Similar to Data Wars: The Bloody Enterprise strikes back (20)

The Art Of Readable Code
The Art Of Readable CodeThe Art Of Readable Code
The Art Of Readable Code
 
Beyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the codeBeyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the code
 
Getting started with Spark & Cassandra by Jon Haddad of Datastax
Getting started with Spark & Cassandra by Jon Haddad of DatastaxGetting started with Spark & Cassandra by Jon Haddad of Datastax
Getting started with Spark & Cassandra by Jon Haddad of Datastax
 
Spark Summit EU talk by Ted Malaska
Spark Summit EU talk by Ted MalaskaSpark Summit EU talk by Ted Malaska
Spark Summit EU talk by Ted Malaska
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
Beyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeBeyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the code
 
Beyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeBeyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the code
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
Hotsos 2012
Hotsos 2012Hotsos 2012
Hotsos 2012
 
Ben Coverston - The Apache Cassandra Project
Ben Coverston - The Apache Cassandra ProjectBen Coverston - The Apache Cassandra Project
Ben Coverston - The Apache Cassandra Project
 
Run Node Run
Run Node RunRun Node Run
Run Node Run
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
Beyond php it's not (just) about the code
Beyond php   it's not (just) about the codeBeyond php   it's not (just) about the code
Beyond php it's not (just) about the code
 
Master tuning
Master   tuningMaster   tuning
Master tuning
 
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
 
Jan 2015 - Cassandra101 Manchester Meetup
Jan 2015 - Cassandra101 Manchester MeetupJan 2015 - Cassandra101 Manchester Meetup
Jan 2015 - Cassandra101 Manchester Meetup
 
Big Data Day LA 2016/ Hadoop/ Spark/ Kafka track - Data Provenance Support in...
Big Data Day LA 2016/ Hadoop/ Spark/ Kafka track - Data Provenance Support in...Big Data Day LA 2016/ Hadoop/ Spark/ Kafka track - Data Provenance Support in...
Big Data Day LA 2016/ Hadoop/ Spark/ Kafka track - Data Provenance Support in...
 
Migrating To PostgreSQL
Migrating To PostgreSQLMigrating To PostgreSQL
Migrating To PostgreSQL
 

More from Victor_Cr

Data Wars: The Bloody Enterprise strikes back
Data Wars: The Bloody Enterprise strikes backData Wars: The Bloody Enterprise strikes back
Data Wars: The Bloody Enterprise strikes backVictor_Cr
 
Type War: Weak vs Strong [JEEConf 2016]
Type War: Weak vs Strong [JEEConf 2016]Type War: Weak vs Strong [JEEConf 2016]
Type War: Weak vs Strong [JEEConf 2016]Victor_Cr
 
Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!
Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!
Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!Victor_Cr
 
Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!
Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!
Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!Victor_Cr
 
Legacy: как победить в гонке (Joker)
Legacy: как победить в гонке (Joker)Legacy: как победить в гонке (Joker)
Legacy: как победить в гонке (Joker)Victor_Cr
 
Web-application I’ve always dreamt of (Kharkiv)
Web-application I’ve always dreamt of (Kharkiv)Web-application I’ve always dreamt of (Kharkiv)
Web-application I’ve always dreamt of (Kharkiv)Victor_Cr
 
Web application I have always dreamt of (Lviv)
Web application I have always dreamt of (Lviv)Web application I have always dreamt of (Lviv)
Web application I have always dreamt of (Lviv)Victor_Cr
 
Web application I have always dreamt of
Web application I have always dreamt ofWeb application I have always dreamt of
Web application I have always dreamt ofVictor_Cr
 
Legacy projects: how to win the race
Legacy projects: how to win the raceLegacy projects: how to win the race
Legacy projects: how to win the raceVictor_Cr
 
Legacy projects: how to win the race
Legacy projects: how to win the raceLegacy projects: how to win the race
Legacy projects: how to win the raceVictor_Cr
 
Jboss drools expert (ru)
Jboss drools expert (ru)Jboss drools expert (ru)
Jboss drools expert (ru)Victor_Cr
 
JEEConf JBoss Drools
JEEConf JBoss DroolsJEEConf JBoss Drools
JEEConf JBoss DroolsVictor_Cr
 
JBoss Drools
JBoss DroolsJBoss Drools
JBoss DroolsVictor_Cr
 
XPDays Ukraine: Legacy
XPDays Ukraine: LegacyXPDays Ukraine: Legacy
XPDays Ukraine: LegacyVictor_Cr
 
Club of anonimous developers "Refactoring: Legacy code"
Club of anonimous developers "Refactoring: Legacy code"Club of anonimous developers "Refactoring: Legacy code"
Club of anonimous developers "Refactoring: Legacy code"Victor_Cr
 

More from Victor_Cr (16)

Data Wars: The Bloody Enterprise strikes back
Data Wars: The Bloody Enterprise strikes backData Wars: The Bloody Enterprise strikes back
Data Wars: The Bloody Enterprise strikes back
 
Type War: Weak vs Strong [JEEConf 2016]
Type War: Weak vs Strong [JEEConf 2016]Type War: Weak vs Strong [JEEConf 2016]
Type War: Weak vs Strong [JEEConf 2016]
 
Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!
Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!
Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!
 
Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!
Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!
Types: Weak/Duck/Optional vs Strong/Strict. Let the War Begin!
 
Legacy: как победить в гонке (Joker)
Legacy: как победить в гонке (Joker)Legacy: как победить в гонке (Joker)
Legacy: как победить в гонке (Joker)
 
Web-application I’ve always dreamt of (Kharkiv)
Web-application I’ve always dreamt of (Kharkiv)Web-application I’ve always dreamt of (Kharkiv)
Web-application I’ve always dreamt of (Kharkiv)
 
Web application I have always dreamt of (Lviv)
Web application I have always dreamt of (Lviv)Web application I have always dreamt of (Lviv)
Web application I have always dreamt of (Lviv)
 
Web application I have always dreamt of
Web application I have always dreamt ofWeb application I have always dreamt of
Web application I have always dreamt of
 
Legacy projects: how to win the race
Legacy projects: how to win the raceLegacy projects: how to win the race
Legacy projects: how to win the race
 
Legacy projects: how to win the race
Legacy projects: how to win the raceLegacy projects: how to win the race
Legacy projects: how to win the race
 
Jboss drools expert (ru)
Jboss drools expert (ru)Jboss drools expert (ru)
Jboss drools expert (ru)
 
JEEConf WEB
JEEConf WEBJEEConf WEB
JEEConf WEB
 
JEEConf JBoss Drools
JEEConf JBoss DroolsJEEConf JBoss Drools
JEEConf JBoss Drools
 
JBoss Drools
JBoss DroolsJBoss Drools
JBoss Drools
 
XPDays Ukraine: Legacy
XPDays Ukraine: LegacyXPDays Ukraine: Legacy
XPDays Ukraine: Legacy
 
Club of anonimous developers "Refactoring: Legacy code"
Club of anonimous developers "Refactoring: Legacy code"Club of anonimous developers "Refactoring: Legacy code"
Club of anonimous developers "Refactoring: Legacy code"
 

Recently uploaded

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 

Recently uploaded (20)

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 

Data Wars: The Bloody Enterprise strikes back

  • 3. It is GOOD when we have a lot of data when we have data several years old, the older the better It is BAD when we have to remove historical data
  • 4. It is BAD when we have a lot of code when we have code several years old, the older the worse It is GOOD when we have to remove historical code
  • 9. Money Float & Double Problem Developers usually have no idea how it is represented: • 𝑒 = 2.718281828459045 • π = 3.141592653589793 • tan π 2 = 1.633123935319537𝑬16
  • 10. Money Float & Double Quiz #1 • = ? Float: 0.6 + 0.1 • = ? Double: 0.6 + 0.1
  • 11. Money Float & Double Quiz #1 • = 0.70000005 Float: 0.6 + 0.1 • = 0.7 Double: 0.6 + 0.1
  • 12. Money: Float & Double: stackoverflow.com
  • 13. Money Float & Double Quiz #2 • = ? Float: 0.2 + 0.1 • = ? Double: 0.2 + 0.1
  • 14. Money Float & Double Quiz #2 • = 0.3 Float: 0.2 + 0.1 • = 0.30000000000000004 Double: 0.2 + 0.1
  • 15. Money Float & Double Drill Down • Binary representation: [sign] [exponent] [mantissa] • Float: 1 bit, 8 bits, 23 bits • Double: 1 bit, 11 bits, 52 bits • Value: (2 ∗ 1 − 𝑠 − 1) ∗ 2 𝑒−2 𝐸−1−1 ∗ (1 + 𝑚/2 𝑀) 0.1f = 0-01111011-10011001100110011001101 0.1f = + 2-127+123 * (2-1 + 2-4 + 2-5 + 2-8 + 2-9 + 2-12 + 2-13 + 2-16 + 2-17 …) 0.1f = 2-4 * (1 + 5033165 / 223) = 0.100000001490116119384765625
  • 17. Money Float & Double Quiz #3 +0.0f = 0-00000000-00000000000000000000000 -0.0f = 1-00000000-00000000000000000000000 +0.0f == -0.0f?
  • 18. Money Float & Double Drill Down /** * Get or create float value for the given float. * * @param d the float * @return the value */ public static ValueFloat get(float d) { if (d == 1.0F) { return ONE; } else if (d == 0.0F) { // -0.0 == 0.0, and we want to return 0.0 for both return ZERO; } return (ValueFloat) Value.cache(new ValueFloat(d)); }
  • 19. Money Float & Double Summary Just never use it Forget it exists Unless you are working on a video codec
  • 20. Money Convert to Integer Multiply decimals up to integers • (as a constant probably) Keep the “scale” somewhere else
  • 21. Money Convert to Integer Quiz #1 •= ? 10 * 230 + 5
  • 22. Money Convert to Integer Quiz #1 •= 28, where 10 is 10% 10 * 230 + 5
  • 23. Money Convert to Integer Drill Down @Embeddable public class Amount implements Serializable { private int rate; @Transient private final int scale; public Amount() { scale = 6; } public Amount(int rate, int scale) { this.scale = scale; setRate(rate); } …
  • 24. Money Convert to Integer Summary • It is better to keep precision closer to the number • It is better when arithmetic just works • It is better when equals and compareTo work • int <*/+> int can exceed int (same with long) • Consistency is almost always above performance
  • 25. Money Solution BigDecimal Precision and accuracy are known and adjustable Arithmetic is included Supported by JDK, JDBC, and etc Performance is quite nice
  • 28. Identity Overflow Integer and Long are finite types Sometimes they can overflow Moreover they usually twice smaller than you think
  • 31. Identity Overflow Sucker Punch • Also, “some languages” cannot work with 53+ bits integer types • In addition, “some languages” work with custom 32-bit integer types
  • 32. Identity Overflow Summary There is a difference between DB and API identity • Always use integer types as identity for DB • Always use text types as identity for API • Avoid using 32- bit types as identity at all Unless you are 99.9% sure
  • 33. Identity UUID • Are not guaranteed to be globally unique • Not K-ordered • In most of the cases are excessively big (128 bit) • Can be the reason of a serious performance degradation • Have different versions which may suite better or worse • Strangely enough RDBMS rarely supports UUID/GUID data types • Weird: • Time based on 100-nanosecond intervals since 15th of October 1582 • Were invented/published around 1999
  • 34. Identity UUID Store as String • 16 bytes UUID is 128-bit value • 36 symbols – which is more than 2 times bigger A96A0D4C-49D0-4431-B126-4C66688ADEF3
  • 36. Identity UUID Example $ uuidgen 0c8aa0f6-9f6f-4fad-9662-1b683f2f4a0d $ uuidgen 1ee09695-3a04-4e7a-8bab-e67dabc4b5a2 $ uuidgen -t 3770f4d0-88b3-11e6-bba6-005056bb68cb $ uuidgen -t 3b14dd54-88b3-11e6-8c53-005056bb68cb
  • 37. Identity Solution • Use text representation for public identities (API) • Database Sequences (Long) • UUID + Database Sequences (Long) • UUID (BigInteger/Binary) • Twitter Snowflake (Long) – outdated • UUID (String) • *Flake (128 bit)
  • 39. String Java and encoding JDBC drivers and DB types
  • 40. String Encoding Java uses UTF-16 for String encoding UTF-16 has symbol range: 0x0000..0x10FFFF String uses char[] (byte[] in JDK9) Char has range: 0x0000..0xFFFF
  • 41. String Encoding Quiz #1 How to represent range 0x100000..0x10FFFF using char?
  • 42. String Encoding Quiz #1 • Define surrogate range: 0xD800..0xDFFF (0x800 characters) • Split it equally to “High”: 0xD800..0xDBFF and “Low”: 0xDC00..0xDFFF • Combine “High”-to-“Low” to get 0x400 * 0x400 = 0x100000 symbols • Profit??? • Profit!!!
  • 43. String Encoding Quiz #2 String x = new String(new char[]{ 'z',0xD801,0xDC37,'a','b','c' }); System.out.println(x); System.out.println(x.substring(0,2)); System.out.println(x.substring(2));
  • 44. String Encoding Quiz #2 z𐐷abc z? ?abc
  • 45. String Encoding Solution No solution, just be aware Yet, it might be more sophisticated soon
  • 46. String JDBC vs DB Mapping DB specific types to JDBC Some DB or driver exceptional cases BLOB vs CLOB Narrower DB encoding
  • 47. String JDBC vs DB Mapping public enum JDBCType implements SQLType { CHAR(Types.CHAR), VARCHAR(Types.VARCHAR), LONGVARCHAR(Types.LONGVARCHAR), ... BLOB(Types.BLOB), CLOB(Types.CLOB), ... NCHAR(Types.NCHAR), NVARCHAR(Types.NVARCHAR), LONGNVARCHAR(Types.LONGNVARCHAR), NCLOB(Types.NCLOB),
  • 48. String JDBC vs DB Mapping • CHARACTER [(len)] or CHAR [(len)] • VARCHAR (len) • BOOLEAN • SMALLINT • INTEGER or INT • DECIMAL [(p[,s])] or DEC [(p[,s])] • NUMERIC [(p[,s])] • REAL • FLOAT(p) • DOUBLE PRECISION • DATE • TIME • TIMESTAMP • CLOB [(len)] or CHARACTER LARGE OBJECT [(len)] or CHAR LARGE OBJECT [(len)] • BLOB [(len)] or BINARY LARGE OBJECT [(len)]
  • 49. String JDBC vs DB Quiz #1 What is JDBC type LONGVARCHAR?
  • 50. String JDBC vs DB Drill Down setStringInternal(int var1,String var2) throws SQLException { ... int var6 = var2 != null?var2.length():0; ... if(var6 <= this.maxVcsCharsSql) { this.basicBindString(var1, var2); } else if(var6 <= this.maxStreamNCharsSql) { this.setStringForClobCritical(var1, var2); } else { this.setStringForClobCritical(var1, var2); }
  • 52. String JDBC vs DB BLOB & CLOB • just bytes Binary Large OBject • just characters in your DB encoding Character Large OBject
  • 53. String JDBC vs DB Char & NChar • uses your DB encoding or no encoding Char, Varchar, CLOB… • uses specified encoding NChar, NVarchar, NCLOB… • does not have NBLOB BLOB
  • 54. String JDBC vs DB Cp1251 vs Cp1252 Sometimes encoding does not matter much Unless too smart drivers spoil it Unless they are not compatible
  • 55. String JDBC vs DB Solution Check your DB encoding upfront If needed use N* DB types and N* JDBC types as well
  • 56. String JDBC vs DB Solution Losing data because of encoding is lame If you expect some strange strings coming use N* types Never forget that symbol is not a char/byte it may save you one day Your JDBC driver can screw you
  • 57. Date
  • 58. Date Time zones DST and leap miracles
  • 59. Date Time Zone Does DB and App time zone match? What can go wrong if they don’t?
  • 60. Date Time Zone Quiz #1 • Database: Oracle 11g • Database time zone: CET/CEST (+01:00/+02:00) • Application: Java 8 • Application time zone: EET/EEST (+02:00/+03:00) • setTimestamp(‘2016-10-14 15:35:01’)? • getTimestamp()?
  • 61. Date Time Zone Quiz #1 Hint final int oracleYear(int var1) { int var2 = ((this.rowSpaceByte[0 + var1] & 255) - 100) * 100 + (this.rowSpaceByte[1 + var1] & 255) - 100; return var2 <= 0?var2 + 1:var2; } final int oracleMonth(int var1) { return this.rowSpaceByte[2 + var1] - 1; } final int oracleDay(int var1) { return this.rowSpaceByte[3 + var1]; } final int oracleHour(int var1) { return this.rowSpaceByte[4 + var1] - 1; } final int oracleMin(int var1) { return this.rowSpaceByte[5 + var1] - 1; } final int oracleSec(int var1) { return this.rowSpaceByte[6 + var1] - 1; } final int oracleTZ1(int var1) { return this.rowSpaceByte[11 + var1]; } final int oracleTZ2(int var1) { return this.rowSpaceByte[12 + var1]; }
  • 62. Date Time Zone Quiz #1 • 2016-10-14 15:35:01 Database • 2016-10-14 15:35:01 Application
  • 63. Date Time Zone Quiz #1 • 2016-10-14 15:35:01 Database • 2016-10-14 15:35:01 Application with UTC time zone
  • 64. Date Time Zone Quiz #2 JavaScript client: time zone unknown Java server: EET time zone How to pass dates?
  • 65. Date Time Zone Quiz #2 • Date… ehmm… JSON does not know what it is… • Long is a bit of a problem for 53+ impotent integer types (now 41, ~140,000 years and we will cross the border) • String as ISO 8601 is a lesser evil
  • 66. Date Time Zone Solution Use the same App/DB time zone Check your DB driver to ensure conversion safety Store timestamps as long: DB and API Store timestamps as String: API
  • 67. Date DST & Magic Missing and extra hours Leap seconds
  • 68. Date DST & Magic Calculations 24 hours in a day 60 minutes in an hour 60 seconds in a minute FTW: 24 * 60 * 60 * 1000
  • 69. Date DST & Magic Quiz #1 27.03.2016 00:00:00 - 28.03.2016 00:00:00 (EET/EEST)
  • 70. Date DST & Magic Quiz #1 26.03.2016 22:00:00 - 27.03.2016 21:00:00 (UTC) – 23h
  • 71. Date DST & Magic Quiz #2 31.12.2016 00:00:00 – 01.01.2017 00:00:00 (EET/EEST) 01.01.2017 00:00:00 – 02.01.2017 00:00:00 (EET/EEST)
  • 72. Date DST & Magic Quiz #2 30.12.2016 22:00:00 – 31.01.2017 22:00:00 (UTC) – 24h 31.12.2017 22:00:00 – 01.01.2017 22:00:00 (UTC) – 24h+1s
  • 73. Date DST & Magic Quiz #2 It will happen: 31.12.2016 23:59:60 (UTC) It had happened: 30.06.2015 23:59:60 (UTC) Blame the Earth, and Moon, and Sun Blame software developers
  • 74. Date One Last Thing Date vs Interval Date is a tuple of year, month, day, hour, and etc. Instant is a precise point on the timeline
  • 75. Date One Last Thing Date vs Interval Date can be converted to Instant Instant can be converted to Date • even within a Chronology However, “conversion rate” is not constant
  • 76. Date Summary • Use UTC as much as possible • Keep in mind the difference between Date and Instant • Think of Date/Instant interoperation as it was designed/used by idiots • 24*60*60*1000 is, basically, simplification. Quite harmful at times. • Use proper date libraries – you wouldn’t want to reinvent it again. • GMT is not yet another name for UTC, beware!